【发布时间】:2015-02-14 15:54:45
【问题描述】:
我有一个如下文件:
A 4 ab,cc,ab,bc
B 6 x,xx,y,%,%%,\,\\
AB 0
我需要从文件的第三列中 grep 特殊字符并返回其对应的第一列。例如,我需要 grep '%' 它会返回 B(它对应的第一列)
我尝试过使用:
grep -w "%" file1
但它会同时返回 % 和 %% 。喜欢:
B 6 x,xx,y,%,%%,\,\\
其中 %,%% 突出显示。我只想 grep 搜索的确切单词/字符。在上述情况下,它应该只尝试查找 '%' 而不是 '%%'。这种方法适用于 grep 手册 grep -w 中的单词,当它找到包含形成整个单词的匹配的行时。
我也试过用它
grep -wP "%" file1
对于 Perl 类似的模式。但是什么都没有回。
谁能建议我如何 grep 精确匹配的特殊字符?然而,这并不能解决特殊字符“\”的问题。反斜杠可以转义和处理。但是对于其他特殊字符,我需要找到解决方案。
好的。在我的问题中需要稍作改动。根据我的问题,这里给出的所有答案都很棒并且效果很好。但也许我在这里错过了另一个要求。我的错。因为这里的所有解决方案都使用 '%' 作为测试参数,但 '%' 只是我的例子。我真正想要的是更多适用于所有单词/字符的通用解决方案。我举个例子。考虑下面的文件:
A 4 a b,c c,ab,bc
^ ^
^ couple of tabs here
multiple spaces here
B 6 x,xx,y,%,%%,\,\\
AB 0
我的意思是该文件可以包含任何类型的字符、单词(由单个/多个空格、制表符等分隔)以及任何特殊字符(包括单引号 (')、双引号 (" ), 反斜杠 ())。这三个需要特殊处理,因为它们是保留的。
我很抱歉之前错过了这部分,但我希望我在这里寻找的解决方案现在很清楚。
我会投票支持特殊字符的所有有效解决方案。但它不允许我(减少声誉)。但是会有一个通用的解决方案吗?或者我是否可以通过 shell 脚本中的一些 if 条件来分隔单词(字母和数字)和特殊字符?
提前致谢
【问题讨论】:
-
你的预期输出是什么?
标签: regex linux perl shell grep