我想遍历一个文件并删除某些行。示例文件:
测试.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
这是sed
UNIX 流编辑器的工作:
(sed '/^b/d' yourfile > yourfile~ && mv yourfile~ yourfile) || rm yourfile~
该命令将删除所有以 a 开头的b
行并将剩余的行写入备份文件。如果成功,备份文件将被重命名为原始文件,如果失败,备份文件将被删除。
你可以用 grep oneliner 来做到这一点:
grep -v "^b" test.txt > newfile
使用 bash 内置功能轻松完成:
while read -r; do
[[ $REPLY = b* ]] || printf '%s\n' "$REPLY"
done <file >file.new
mv file.new file
“Perl ...它可能在你的$PATH
” :-)
在 BSD、OSX、Linux、AIX、Solaris 和各种“标准 POSIX”与 BSD、Linux 和 GNU 扩展以及其他实用程序上使用 a$SHELL
处理微小的文本任务(即sh
, ksh
, zsh
, bash
, tcsh
, ) ,并注意考虑与许多服务器系统上的古老版本的工具......可能很难。csh
sed
grep
gawk
awk
perl -i.orig -ne 'print unless /^b/' test.txt
它奏效了吗?
diff test.txt test.txt.orig