20

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

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

line1 abcdefg done
line2 abcdefg done
line3 abcdeft done
4

5 回答 5

34

使用 awk:

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

或带有内联标志的 sed:

sed -i.bak '!/[^[:blank:]]/s/$/ done/' inFile
于 2013-06-07T18:55:15.597 回答
3

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
于 2013-10-30T23:14:38.890 回答
3

我读过吗?

内容script.vim

set backup
g/^/ normal A done
normal ZZ

像这样运行它:

vim -S script.vim infile

它将就地修改文件,创建带~后缀的备份。

于 2013-06-07T19:06:39.510 回答
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 的评论进行编辑。

于 2013-06-07T19:09:46.363 回答
0

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

输入

line1 abcdefg 
line2 abcdefg 
line3 abcdeft 

代码

  perl -lane 'print $F[0]," ",$F[1]," done"' Input 
于 2013-06-07T19:32:20.897 回答