Как добавить строку после каждой строки в файле с помощью 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
-
Чистая оболочка и
sponge
POSIX: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