如何从每个行中特定字符串重复多次的文件中获取行?

时间:2011-10-13 12:44:21

标签: perl unix awk solaris nawk

我有一个类似下面的文件(示例文件)。

  

10,鲍勃,ELEC,鲍勃,英雄,,

     

20,鲍勃,机甲,史蒂夫,六月,,, yumm

     

30,鲍勃,INSTR,鲍勃,森

     

40,鲍勃,复合,亚历克斯,六月,SYU ,,

     

50,鲍勃,化学,鲍勃,鲍勃,安瑟尼

我需要字符串Bob在每行中出现多次的所有行

此外,如果它不是如上所述的分隔文件,并且如果它是如下文件那么我将如何得到特定字符串重复的行(在这种情况下Bob

  

10,鲍勃,elecBob,英雄,,

     

20,鲍勃,机甲,史蒂夫,六月|||鲍勃,yummBob

     

30,BobExtarvagnaxz |||

我尝试了几种选择,但没有达到完全要求。

由于 Chethan

4 个答案:

答案 0 :(得分:1)

输出中以20开头的行与输入中的20不相同。 为什么30,50输入不输出?他们有不止一个“鲍勃”。

无论如何,试试这条快速而又脏的线是否适用于你。

 awk '/.*(Bob).*(Bob).*/' yourFile

答案 1 :(得分:1)

您可以使用正则表达式。

如果您有逗号分隔文件,您可以使用以下命令查找一个Bob,然后是另一个Bob:

grep -E "(^|,)Bob,.*Bob(,|$)" file.txt

如果文件没有分隔,您可以使用更通用的正则表达式,如:

grep -E "^.*Bob.*Bob.*$" file.txt

但是,如果您有像Bob,steve,Bobby这样的行,这可能无法正常工作,因为它不知道如何区分Bob和Bobby。

答案 2 :(得分:1)

这将删除任何没有多个Bobs的行。

sed '/Bob.*Bob/!d' filename

答案 3 :(得分:1)

以下内容将打印出在同一行重复任何3个或更多字符串的每一行(如果要匹配的字符串应该更长,只需在括号内插入更多的点):

 $ grep '\(....*\).*\1' testdat

给出以下输入文件:

 hahaAliAlihehe
 Ali ist allein
 Ali, Alibaba, Alimente
 Bert, Bertha, Bertram
 Holger, V'ger, Ludger
 Susi,Bernd,Holger

打印:

 hahaAliAlihehe
 Ali, Alibaba, Alimente
 Bert, Bertha, Bertram
 Holger, V'ger, Ludger