循环遍历文件并删除某些行

时间:2013-07-05 15:20:56

标签: bash shell

我想循环浏览文件并删除某些行。示例文件:

的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

4 个答案:

答案 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进行微小的文字任务(例如shkshzshbashtcsh,{{1} })在BSD,OSX,Linux,AIX,Solaris上使用各种“标准POSIX”与BSD,Linux和GNU扩展到cshsed和其他实用程序,并注意{{1}与grep和许多服务器系统上的古老版本工具相比......可能很难。

gawk

有效吗?

awk