问题:我需要在文本文件每行的末尾添加一些单词。 有谁知道任何可以做这个工作的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