shell脚本每行添加后缀

问题:我需要在文本文件每行的末尾添加一些单词。 有谁知道任何可以做这个工作的Linux bash shell脚本? 谢谢!

例如:在每行的末尾添加单词:

 line1 abcdefg done line2 abcdefg done line3 abcdeft done 

使用awk:

 awk 'NF{print $0 " done"}' inFile 

OR sed with inline flag:

 sed -i.bak '!/[^[:blank:]]/s/$/ done/' inFile 

我读过vim吗?

script.vim内容:

 set backup g/^/ normal A done normal ZZ 

像这样运行它:

 vim -S script.vim infile 

它将在原地修改文件,以~后缀创建备份。

如果你想以纯粹的方式来做到这一点,你可以这样做:

 #!/bin/bash INFILE=$1 TMPFILE=/tmp/$INFILE.$$ while IFS= read -r; do echo "$REPLY done"; done <$INFILE >$TMPFILE ; mv $TMPFILE $INFILE; 

其中,如果调用append.sh可以这样调用:

 bash append.sh file.txt 

根据1_CR的评论进行编辑

sed总是对这些任务有帮助,

  # cat append.txt line1 abcdefg line2 abcdefg line3 abcdeft # sed -i 's/$/done/g' append.txt # cat append.txt line1 abcdefg done line2 abcdefg done line3 abcdeft done 

要么

你可以使用下面的脚本:

  # cat sedcheck.sh #!/bin/bash if [ $# -eq 0 ] then echo "No input supplied" else sed -i 's/$/ '$1'/g' $2 fi # cat append.txt line1 abcdefg donedin line2 abcdefg donedin line3 abcdeft donedin # ./sedcheck.sh testing append.txt # cat append.txt line1 abcdefg donedin testing line2 abcdefg donedin testing line3 abcdeft donedin testing 

Perl的方式…一样的awk单行

输入

 line1 abcdefg line2 abcdefg line3 abcdeft 

  perl -lane 'print $F[0]," ",$F[1]," done"' Input