如何使用 bash 在文件中的每一行后面添加字符串?可以使用 sed 命令来完成吗? 如果可以的话,如何完成?
如果您的 sed允许通过 -i参数进行适当的编辑:
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
Sed 有点丑,你可以这样优雅地做:
hendry@i7 tmp$ cat foo bar candy car hendry@i7 tmp$ for i in `cat foo`; do echo ${i}bar; done barbar candybar carbar
如果你有它,我是(层压)实用程序可以做到这一点,例如:
$ lam filename -s "string after each line"
我更喜欢使用 awk。 如果只有一列,则使用 $0,否则将其替换为最后一列。
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
纯 POSIX 外壳和 sponge:
sponge
suffix=foobar while read l ; do printf '%s\n' "$l" "${suffix}" ; done < file | sponge file
xargs and printf:
xargs
printf
suffix=foobar xargs -L 1 printf "%s${suffix}\n" < file | sponge file
Using join:
join
suffix=foobar join file file -e "${suffix}" -o 1.1,2.99999 | sponge file
Shell tools using paste, yes, head & wc:
paste
yes
head
wc
suffix=foobar paste file <(yes "${suffix}" | head -$(wc -l < file) ) | sponge file
请注意,paste在 $suffix之前插入一个 标签字符。
$suffix
当然,可以用一个临时文件替换 sponge,然后用原始文件名替换 mv,就像其他一些答案一样..。
mv
我更喜欢使用纯 bash:
cat file | while read line; do echo ${line}$string; done
这只是添加了使用 echo 命令在文件中的每一行末尾添加一个字符串:
cat input-file | while read line; do echo ${line}"string to add" >> output-file; done
添加 >将指导我们对输出文件所做的更改。