我需要在文本文件的每一行末尾添加一些单词。如何使用 Bash 脚本执行此操作?
示例:done
在每行末尾添加单词:
line1 abcdefg done
line2 abcdefg done
line3 abcdeft done
使用 awk:
awk 'NF{print $0 " done"}' inFile
或带有内联标志的 sed:
sed -i.bak '!/[^[:blank:]]/s/$/ done/' inFile
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
我读过vim吗?
内容script.vim
:
set backup
g/^/ normal A done
normal ZZ
像这样运行它:
vim -S script.vim infile
它将就地修改文件,创建带~
后缀的备份。
如果你想在纯 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 的评论进行编辑。
Perl 方式...与 awk one liner 的方式相同
输入
line1 abcdefg
line2 abcdefg
line3 abcdeft
代码
perl -lane 'print $F[0]," ",$F[1]," done"' Input