Я хочу добавить строку с содержанием, скажем
This is a test 23
ко всем файлам внутри каталога. Контент будет добавлен в файл как первая строка. В каталоге около 800 файлов. Есть ли более простой способ сделать это, чем написать какую-нибудь команду на Perl или сценарий bash?
Ответ находится в Stack Overflow:
https://stackoverflow.com/questions/520742/prepend-to-multiple-files-in-bash-osx-terminal
Если вы просто добавляете в конец файла, вы можете легко сделать это с помощью чего-то вроде кода 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