Назад | Перейти на главную страницу

добавить значения ко всем текстовым файлам в каталоге

Я хочу добавить строку с содержанием, скажем

This is a test 23

ко всем файлам внутри каталога. Контент будет добавлен в файл как первая строка. В каталоге около 800 файлов. Есть ли более простой способ сделать это, чем написать какую-нибудь команду на Perl или сценарий bash?

Если вы просто добавляете в конец файла, вы можете легко сделать это с помощью чего-то вроде кода bash, указанного ниже.

for i in *.txt
do
echo "This is a test 23" >> $i
done

Вам придется использовать некоторый код, но не много:

for I in `ls *.txt`
do
  mv ${I} ${I}.tmp
  cat ${I}.tmp | awk 'BEGIN {print "Test to add"} {print $0}' > ${I}
  rm ${I}.tmp
done

Причина, по которой сначала нужно переименовать файл, заключается в том, что одновременное чтение и запись в один и тот же файл может вызвать проблемы (по крайней мере, для меня).

Вы захотите добавить туда тест, чтобы убедиться, что новый файл создан правильно, прежде чем удалять старый.

Нет, я бы справился с этим простым скриптом на bash.

В частности, я бы написал сценарий bash для вызова sed собственно редактировать файл, но принцип остается в силе. Вы не сможете перебирать список файлов без кода оболочки.

perl - самый простой способ. например:

perl -n -i -e 'local $/ ; print "This is a test 23\n$_";' *.txt

sed быстрее perl и awk и более элегантен, я думаю:

for i in *.txt; do
    sed -i '1i\
    text to add
    ' $i
done