我需要在文本文件的每一行的末尾添加一些单词。如何使用Bash脚本执行此操作?
示例:在每行的末尾添加单词done
:
line1 abcdefg done
line2 abcdefg done
line3 abcdeft done
答案 0 :(得分:26)
使用awk:
awk 'NF{print $0 " done"}' inFile
或者使用内联标志:
sed -i.bak '!/[^[:blank:]]/s/$/ done/' inFile
答案 1 :(得分:2)
我读过vim吗?
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