【发布时间】:2016-11-07 21:31:59
【问题描述】:
我有一个相当大的文本文件,其中包含如下所示的字符串:
//a/b/ww/d/
//b/d/we/c/
//a/b/as/d/e/
//af/y/x/f/e/
//b/d/we/c/
我正在尝试删除所有只有 6 个正斜杠的行。
斜线之间的文本是随机的,可以更长或更短。
期望的输出:
//a/b/as/d/e/
//af/y/x/f/e/
最有效的方法是什么?
【问题讨论】:
我有一个相当大的文本文件,其中包含如下所示的字符串:
//a/b/ww/d/
//b/d/we/c/
//a/b/as/d/e/
//af/y/x/f/e/
//b/d/we/c/
我正在尝试删除所有只有 6 个正斜杠的行。
斜线之间的文本是随机的,可以更长或更短。
期望的输出:
//a/b/as/d/e/
//af/y/x/f/e/
最有效的方法是什么?
【问题讨论】:
这是为awk 量身定做的工作,根据/ 删除的NF(字段数)计数:
awk -F/ 'NF != 7' file
//a/b/as/d/e/
//af/y/x/f/e/
NF==7 表示一行中有 6 个斜杠(分隔符)。
【讨论】:
使用带有-v(反向匹配)标志的grep 来删除匹配/ 6 次出现的行。假设您的文件位于 @/tmp/test.txt,此命令将起作用:
grep -Ev "^[^\/]*(\/[^\/]*){6}$" /tmp/test.txt
我刚刚使用您的示例输入对其进行了测试:
$ grep -Ev "^[^\/]*(\/[^\/]*){6}$" /tmp/test.txt
//a/b/as/d/e/
//af/y/x/f/e/
【讨论】: