Пакетный скрипт, который заменяет статическую строку в файле именем файла - PullRequest
0 голосов
/ 30 августа 2018

У меня 3000 файлов в c:\data\, и мне нужно заменить статическую строку в каждом из них на имя файла. Например, в файле 12345678.txt будет несколько записей вместе со строкой 99999999, и я хочу заменить 99999999 именем файла 12345678.

Как я могу сделать это, используя пакетный скрипт?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

С инструментами GNU:

find . -regex '.*/[0-9]+\.txt' -type f -exec gawk -i inplace '
  BEGINFILE {f = FILENAME; sub(".*/", "", f); sub(/\..*/, "", f)}
  {gsub(/\<99999999\>/, f); print}' {} +
0 голосов
/ 30 августа 2018

попробуйте это,

replace_string="99999999"
for f in *.txt; do
    sed -i "s/${replace_string}/${f%.*}/g" "$f";
done

Пояснение:

  • for f in *.txt; do ... done: цикл по файлам с именем *.txt в текущем каталоге.
  • sed -i ... file Редактировать file на месте (-i).
  • "s/pattern/replacement/g" Заменители (s) шаблон с заменой глобально (g).
  • ${f%.*} Имя файла без расширения ( через )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...