4

我想遍历一个文件并删除某些行。示例文件:

测试.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
4

4 回答 4

9

这是sedUNIX 流编辑器的工作:

(sed '/^b/d' yourfile > yourfile~ && mv yourfile~ yourfile) || rm yourfile~

该命令将删除所有以 a 开头的b行并将剩余的行写入备份文件。如果成功,备份文件将被重命名为原始文件,如果失败,备份文件将被删除。

于 2013-07-05T15:22:43.800 回答
4

你可以用 grep oneliner 来做到这一点:

grep -v "^b" test.txt > newfile
于 2013-07-05T15:24:15.623 回答
3

使用 bash 内置功能轻松完成:

while read -r; do
  [[ $REPLY = b* ]] || printf '%s\n' "$REPLY"
done <file >file.new
mv file.new file
于 2013-07-05T15:25:17.270 回答
0

“Perl ...它可能在你的$PATH” :-)

在 BSD、OSX、Linux、AIX、Solaris 和各种“标准 POSIX”与 BSD、Linux 和 GNU 扩展以及其他实用程序上使用 a$SHELL处理微小的文本任务(即sh, ksh, zsh, bash, tcsh, ) ,并注意考虑与许多服务器系统上的古老版本的工具......可能很难。cshsedgrepgawkawk

perl -i.orig -ne 'print unless /^b/' test.txt

它奏效了吗?

diff test.txt test.txt.orig
于 2013-07-05T19:50:05.047 回答