在Bash中,如何在文件中的每一行之后添加字符串?

时间:2010-05-19 21:45:44

标签: linux bash unix sed

如何使用bash在文件中的每一行之后添加字符串?是否可以使用sed命令完成,如果是这样的话?

6 个答案:

答案 0 :(得分:155)

如果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

答案 1 :(得分:10)

我更喜欢使用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

答案 2 :(得分:7)

如果有,lam(层压)实用程序可以执行此操作,例如:

$ lam filename -s "string after each line"

答案 3 :(得分:4)

我更喜欢echo。使用纯bash:

cat file | while read line; do echo ${line}$string; done

答案 4 :(得分:3)

  1. POSIX shell sponge

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

    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. 使用pasteyeshead的Shell工具 &wc

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

    请注意,paste$suffix之前插入 Tab 字符。

当然sponge可以替换为临时文件,然后mv覆盖原始文件名,还有其他答案...

答案 5 :(得分:-8)

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