В Bash, как добавить строку после каждой строки в файле? - PullRequest
98 голосов
/ 20 мая 2010

Как добавить строку после каждой строки в файле, используя bash? Можно ли это сделать с помощью команды sed, если да, то как?

Ответы [ 5 ]

158 голосов
/ 20 мая 2010

Если ваш sed позволяет редактировать на месте с помощью параметра -i:

sed -e 's/$/string after each line/' -i filename

Если нет, вам нужно создать временный файл:

typeset TMP_FILE=$( mktemp )

touch "${TMP_FILE}"
cp -p filename "${TMP_FILE}"
sed -e 's/$/string after each line/' "${TMP_FILE}" > filename
10 голосов
/ 01 марта 2017

Я предпочитаю использовать awk. Если есть только один столбец, используйте $0, иначе замените его на последний столбец.

В одну сторону,

awk '{print $0, "string to append after each line"}' file > new_file

или это

awk '$0=$0"string to append after each line"' file > new_file
7 голосов
/ 20 мая 2010

Если он у вас есть, утилита lam (Ламинат) может сделать это, например:

$ lam filename -s "string after each line"
3 голосов
/ 09 августа 2018
  1. Чистый Оболочка POSIX и sponge:

    suffix=foobar
    while read l ; do printf '%s\n' "$l" "${suffix}" ; done < file | 
    sponge file
    
  2. xargs и printf:

    suffix=foobar
    xargs -L 1 printf "%s${suffix}\n" < file | sponge file
    
  3. Использование join:

    suffix=foobar
    join file file -e "${suffix}" -o 1.1,2.99999 | sponge file
    
  4. Инструменты оболочки с использованием paste, yes, head & wc:

    suffix=foobar
    paste file <(yes "${suffix}" | head -$(wc -l < file) ) | sponge file
    

    Обратите внимание, что paste вставляет символ Tab до $suffix.

Конечно, sponge может быть заменен временным файлом, после чего mv будет поверх исходного имени файла, как и в случае некоторых других ответов ...

0 голосов
/ 20 мая 2010

Сед немного уродлив, вы можете сделать это элегантно, вот так:

hendry@i7 tmp$ cat foo 
bar
candy
car
hendry@i7 tmp$ for i in `cat foo`; do echo ${i}bar; done
barbar
candybar
carbar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...