如果找到某个模式,AWK或sed需要从输出中删除行

时间:2012-09-04 18:13:02

标签: linux sed awk

我需要启动一些东西来验证文件。 用逗号分隔两个字段的文本, 在第二个字段中,我们可能会找到/*/*/*这是我想要的数据。 我想仅丢弃/*/*

输入文件

\\CIFSERVER1\Share1,/fs1_casa/c/share1
\\CIFSERVER1\Share2,/fs2_casa/c/share2
\\CIFSERVER1\Share3,/fs1_casa/c/share3
\\EDULIN\edu,/edu1
\\CIFSERVER2\root,/fs1_casa
\\CIFSERVER2\root,/fs2_casa
\\CIFSERVER2\root,/fs3_casa
\\CIFSERVER2\root,/fs1_casa

输出应为:

\\CIFSERVER1\Share1,/fs1_casa/c/share1
\\CIFSERVER1\Share2,/fs2_casa/c/share2
\\CIFSERVER1\Share3,/fs1_casa/c/share3

应该删除什么?

\\EDULIN\edu,/edu1
\\CIFSERVER2\root,/fs1_casa
\\CIFSERVER2\root,/fs2_casa
\\CIFSERVER2\root,/fs3_casa
\\CIFSERVER2\root,/fs1_casa

4 个答案:

答案 0 :(得分:2)

如果您想在逗号后加上三个或更多斜杠,

grep ',/.*/.*/' file

答案 1 :(得分:1)

如果您尝试在单/之后打印包含超过3 ,的所有行,您可以这样做:

sed -n '\@,.*/.*/.*/@p' input

限制为包含3 /的那些行:

sed -n '\@,\([^/]*/\)\{3\}[^/]*$@p' input

如果您必须将搜索限制在第二个字段(例如,可能有超过1个逗号):

awk '$2 ~ /[/].*[/].*[/]/' FS=, input

awk -F, '$2 ~ /\/.*\/.*\//'  input

答案 2 :(得分:1)

如果你想保留逗号之后有3个或更多斜杠的条目,删除两个或更少的那些行,那么我会使用:

sed -n '/[^,]*,\/[^/]*\/[^/]*\//p'

-n会抑制正常打印。该模式查找斜杠后跟非斜杠,另一个斜杠,更多非斜杠和另一个斜杠并打印它。如果您必须在第三个斜杠后面加上一个字符,请在正则表达式中的第三个[^/]之后添加\/

答案 3 :(得分:1)

只有两个字段,可以使用grep轻松完成:只保留逗号后面有三个/个字符的行。

grep ',/.*/.*/'

使用更多字段,而grep或sed可以工作,使用awk更容易。

awk -F , '$2 ~ /(\/.*){3}/ {print}'