使用shell脚本为每一行添加后缀

时间:2013-06-07 18:53:03

标签: linux bash shell

我需要在文本文件的每一行的末尾添加一些单词。如何使用Bash脚本执行此操作?

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

line1 abcdefg done
line2 abcdefg done
line3 abcdeft done

5 个答案:

答案 0 :(得分:26)

使用awk:

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

或者使用内联标志:

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

答案 1 :(得分:2)

我读过吗?

script.vim的内容:

set backup
g/^/ normal A done
normal ZZ

像以下一样运行:

vim -S script.vim infile

它将使用~后缀创建备份来就地修改文件。

答案 2 :(得分:1)

如果你想在纯粹的bash中这样做,你可以这样做:

#!/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的评论编辑

答案 3 :(得分:1)

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

答案 4 :(得分:0)

Perl方式......与awk one liner相同

<强>输入

line1 abcdefg 
line2 abcdefg 
line3 abcdeft 

<强>代码

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