Как добавить строку после каждой строки в файле с помощью bash? Можно ли это сделать с помощью команды sed, если да, то как?
113
Если вы 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
touch
временный файл? И я бы поставилsed
команду в зависимость от успеха,cp
иначе оригинал может быть утерян.sed -e 's/^/string after each line/' -i filename
$ означает конец строки. ^ означает начало строки.sed 's/^/string after each line/'
делает то , что я ожидал (добавляется к каждой строке), ноsed 's/^/string after each line/'
не делает (он заменяет всю строку моей строкой добавления). Что дает? Есть идеи @TomDeGisi?Я предпочитаю использовать
awk
. Если есть только один столбец, используйте$0
, иначе замените его последним столбцом.В одну сторону,
или это,
источник
NR
переменную:awk '{print $0, NR}'
sed 's/ //g'
это сработало для моего требования, но оно удалит пробел в каждой строке, вот какой вариантg
для и везде в строке.,
лайк{print $0"string to append after each line"}
.Если он у вас есть, утилита lam (ламинат) может это сделать, например:
источник
Чистая оболочка POSIX и
sponge
:xargs
иprintf
:Использование
join
:Инструменты Shell , используя
paste
,yes
,head
иwc
:Обратите внимание, что перед этим
paste
вставляется символ табуляции$suffix
.Конечно,
sponge
можно заменить временным файлом, а затемmv
поверх исходного имени файла, как и некоторые другие ответы ...источник
sed
, если ресурсы не очень ограничены.sed
не нужен для такой простой работы.Я предпочитаю
echo
. используя чистый bash:источник
Сед немного уродлив, изящно это можно сделать так:
источник
cat foo
; сделать echo $ {i} bar; done foobar barbar bazbar, но после некоторых тестов я могу ошибаться в своих рассуждениях, но Деннис правecho "foo bar" | (for i in `cat`; do echo ${i}bar; done)
который печатает 2 строки, даже если ввод - 1 строкаfoo bar
(иcat
чтение из стандартного ввода вместо файла не имеет значения для этого).