Linux 使用shell脚本为每行添加后缀
我需要在文本文件的每行末尾添加一些单词。如何使用Bash脚本实现这一点 示例:在每行末尾添加单词Linux 使用shell脚本为每行添加后缀,linux,bash,shell,vim,Linux,Bash,Shell,Vim,我需要在文本文件的每行末尾添加一些单词。如何使用Bash脚本实现这一点 示例:在每行末尾添加单词done: line1 abcdefg完成 第2行abcdefg已完成 第3行abcdeft完成 使用awk: awk 'NF{print $0 " done"}' inFile 或带内联标志的sed: sed -i.bak '!/[^[:blank:]]/s/$/ done/' inFile 我读了吗 script.vim的内容: set backup g/^/ normal A done no
done
:
line1 abcdefg完成
第2行abcdefg已完成
第3行abcdeft完成
使用awk:
awk 'NF{print $0 " done"}' inFile
或带内联标志的sed:
sed -i.bak '!/[^[:blank:]]/s/$/ done/' inFile
我读了吗
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;
根据1CR的评论进行编辑。。。。与awk一号班轮相同 输入
line1 abcdefg
line2 abcdefg
line3 abcdeft
代码
perl -lane 'print $F[0]," ",$F[1]," done"' Input
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
人们可能会认为循环中
$TMPFILE
的多个附件可以在循环结束时替换为单个$TMPFILE
loop@1_CR事实上,这样做会更好,我已经更改了代码以反映这一点。在执行此操作时,请将IFS
设置为空字符串,并将-r
传递给read
,类似于,而IFS=read-rx代码>。。阅读所有关于它的信息+1,BTWBetter“@F”
(注意双引号)表示$F[0],“”,$F[1]
。以防行长度(或短于)超过两个单词。解决方案的问题在于,他们在文件末尾添加了一行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