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

Я знаю, что иду вразрез с потоком, когда я предлагаю это, но я обычно предпочитаю использовать распределение общего назначения как Debian. Сделанное на заказ распределение как другие, которые были предложены, будет работать хорошо, если то, в чем Вы нуждаетесь никогда действительно, пойдет вне предлагаемых функций. Распределение общего назначения обычно намного более гибко и легче адаптировать к серверу другие функции. Кроме того, с распределением общего назначения навыки Вы изучаете поддержание, это является более допускающим повторное использование и непосредственно применимым к другим ситуациям, где Вы используете то распределение.

1
задан 5 August 2009 в 02:27
6 ответов

То, что вы оказывались перед необходимостью использует некоторый код, но не очень:

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

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

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

0
ответ дан 3 December 2019 в 18:19
3
ответ дан 3 December 2019 в 18:19

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

for i in *.txt
do
echo "This is a test 23" >> $i
done
1
ответ дан 3 December 2019 в 18:19
  • 1
    Я пытаюсь добавить к началу файла вместо добавления. как я могу изменить вышеупомянутое для той потребности? –   5 August 2009 в 02:48

Нет, простой сценарий удара является способом, которым я занялся бы им.

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

0
ответ дан 3 December 2019 в 18:19

жемчуг является самым легким путем. например:

perl -n -i -e 'local $/ ; print "This is a test 23\n$_";' *.txt
0
ответ дан 3 December 2019 в 18:19

sed более быстр, чем жемчуг и awk и более изящен, я думаю:

for i in *.txt; do
    sed -i '1i\
    text to add
    ' $i
done
0
ответ дан 3 December 2019 в 18:19

Теги

Похожие вопросы