3

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

输入文件

\\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

4 回答 4

2

如果你想在逗号后面加上三个或更多的斜线,

grep ',/.*/.*/' file
于 2012-09-04T18:25:52.677 回答
1

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

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

要限制为恰好包含 3 的那些行/

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

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

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

或者

awk -F, '$2 ~ /\/.*\/.*\//'  input
于 2012-09-04T18:21:32.913 回答
1

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

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

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

于 2012-09-04T18:24:07.033 回答
1

只有两个字段,这很容易用 grep 完成:只保留/逗号后有三个字符的行。

grep ',/.*/.*/'

对于更多字段,虽然 grep 或 sed 可以工作,但使用 awk 会更容易。

awk -F , '$2 ~ /(\/.*){3}/ {print}'
于 2012-09-04T18:27:51.383 回答