Как добавить строку после каждой строки в файле с помощью bash? Можно ли это сделать с помощью команды sed, если да, то как?
В Bash, как добавить строку после каждой строки в файле?
Ответ 1
Если ваш 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
Ответ 2
Я предпочитаю использовать 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
Ответ 3
Если у вас есть это, утилита lam (ламинат) может сделать это, например:
$ lam filename -s "string after each line"
Ответ 4
-
Чистая оболочка и
spongePOSIX:suffix=foobar while read l ; do printf '%s\n' "$l" "${suffix}" ; done < file | sponge file -
xargsиprintf:suffix=foobar xargs -L 1 printf "%s${suffix}\n" < file | sponge file -
Используя
join:suffix=foobar join file file -e "${suffix}" -o 1.1,2.99999 | sponge file -
Инструменты оболочки, используя
paste,yes,headиwc:suffix=foobar paste file <(yes "${suffix}" | head -$(wc -l < file) ) | sponge fileОбратите внимание, что
pasteвставляет символ табуляции перед$suffix.
Конечно, sponge может быть заменена временным файлом, после чего mv 'd поверх исходного имени файла, как с некоторыми другими ответами...
Ответ 5
Sed немного уродлива, вы можете сделать это элегантно, как это:
[email protected] tmp$ cat foo
bar
candy
car
[email protected] tmp$ for i in `cat foo`; do echo ${i}bar; done
barbar
candybar
carbar