我需要在文本文件的每一行末尾添加一些单词。如何使用Bash脚本实现?
例如:在每一行末尾添加单词
例如:在每一行末尾添加单词
done
。line1 abcdefg done
line2 abcdefg done
line3 abcdeft done
使用awk:
awk 'NF{print $0 " done"}' inFile
使用带有内联标志的OR 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
~
作为后缀。#!/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
$TMPFILE
的多次追加可以在循环结束时用单个 >$TMPFILE
替换。 - iruvarline1 abcdefg
line2 abcdefg
line3 abcdeft
代码
perl -lane 'print $F[0]," ",$F[1]," done"' Input
"@F"
(注意双引号),而不是 $F[0]," ",$F[1]
。以防万一,行的长度可能会超过(或少于)两个单词。 - Birei
done
- 这不是我们想要的。 - Andrew Savinykh