我想循环浏览文件并删除某些行。示例文件:
的test.txt
a
b
c
d
我有什么:
FILE=/tmp/test.txt
while read FILE
do
# if the line starts with b delete it otherwise leave it there
?
done
答案 0 :(得分:8)
这是sed
的作业 - UNIX流编辑器:
(sed '/^b/d' yourfile > yourfile~ && mv yourfile~ yourfile) || rm yourfile~
该命令将删除所有以b
开头的行,并将剩余行写入备份文件。如果成功,备份文件将重命名为原始文件,如果失败,备份文件将被删除。
答案 1 :(得分:4)
你可以用grep oneliner做到这一点:
grep -v "^b" test.txt > newfile
答案 2 :(得分:2)
使用bash内置功能轻松完成:
while read -r; do
[[ $REPLY = b* ]] || printf '%s\n' "$REPLY"
done <file >file.new
mv file.new file
答案 3 :(得分:0)
“Perl ......它可能在你的$PATH
”中: - )
使用$SHELL
进行微小的文字任务(例如sh
,ksh
,zsh
,bash
,tcsh
,{{1} })在BSD,OSX,Linux,AIX,Solaris上使用各种“标准POSIX”与BSD,Linux和GNU扩展到csh
,sed
和其他实用程序,并注意{{1}与grep
和许多服务器系统上的古老版本工具相比......可能很难。
gawk
有效吗?
awk