Как добавить строку в начало каждого файла в папке в bash? - PullRequest
16 голосов
/ 27 апреля 2011

Я хочу иметь возможность добавлять строку в начало каждого текстового файла в папке. Как я могу сделать это, используя bash в Linux?

Ответы [ 8 ]

30 голосов
/ 27 апреля 2011

Это сделает это.Вы могли бы сделать его более эффективным, если вы делаете один и тот же текст для каждого файла ...

for f in *; do 
  echo "whatever" > tmpfile
  cat $f >> tmpfile
  mv tmpfile $f
done
19 голосов
/ 27 апреля 2011

Вы можете сделать это без цикла и cat

sed -i '1i whatever' *

, если вы хотите сделать резервную копию ваших файлов, используйте -i.bak

или awk

awk 'FNR==1{$0="whatever\n"$0;}{print $0>FILENAME}' *
5 голосов
/ 27 апреля 2011

И вы можете сделать это, используя sed в 1 единственной команде , а также

for f in *; do
  sed -i.bak '1i\
  foo-bar
  ' ${f}
done
0 голосов
/ 15 мая 2019

Однострочник: rename '' string_ *

0 голосов
/ 05 января 2013

Это самое простое, что я разработал.

sed -i '1s/^/Text чтобы добавить новое file\n/' /file/to/change

0 голосов
/ 27 апреля 2011

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

for file in *; do
  (test ! -f "${file}" || test ! -w "${file}") && continue                # sort out non-files and non-writable files
  if test -s "${file}" && ! grep -Iqs '.*' "${file}"; then continue; fi   # sort out binary files
  printf '\n%s\n\n' "FILE:  ${file}"
  # cf. http://wiki.bash-hackers.org/howto/edit-ed
  printf '%s\n' H 0a "foobar" . ',p' q | ed -s "${file}"  # dry run (just prints to stdout)
  #printf '%s\n' H 0a "foobar" . wq | ed -s "${file}"     # in-place file edit without any backup
done | less
0 голосов
/ 27 апреля 2011

Вы также можете сделать это:

for f in *; do
  cat <(echo "someline") $f > tempfile
  mv tempfile $f
done

Это мало чем отличается от 1-го поста, но показывает, как обрабатывать вывод оператора 'echo' как файл без необходимости создания временногофайл для хранения значения.

0 голосов
/ 27 апреля 2011

Это должно сработать.

FOLDER='path/to/your/folder'
TEXT='Text to prepend'
cd $FOLDER
for i in `ls -1 $FOLDER`; do
     CONTENTS=`cat $i`
     echo $TEXT > $i  # use echo -n if you want the append to be on the same line
     echo $CONTENTS >> $i
done

Я бы не рекомендовал делать это, если ваши файлы очень большие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...