0

我有一个像下面这样的文件(一个示例文件)。

10,鲍勃,电,鲍勃,英雄,,

20,鲍勃,机械,史蒂夫,朱尼,,,yumm

30,鲍勃,instr,鲍勃,森

40,鲍勃,comps,alex,juni,syu,,

50,鲍勃,化学,鲍勃,鲍勃,森尼

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

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

10,鲍勃,elecBob,英雄,,

20,鲍勃,机械,史蒂夫,朱尼|||鲍勃,yumm鲍勃

30,鲍勃·埃斯塔瓦格纳兹|||

我尝试了几个选项,但没有最终确定到底需要什么。

谢谢切坦

4

4 回答 4

1

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

无论如何,试试这条快速而肮脏的线路是否适合你。

 awk '/.*(Bob).*(Bob).*/' yourFile
于 2011-10-13T12:56:23.587 回答
1

您可以使用正则表达式。

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

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

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

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

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

于 2011-10-13T13:01:10.040 回答
1

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

sed '/Bob.*Bob/!d' filename
于 2011-10-13T13:35:39.830 回答
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
于 2011-10-13T14:05:58.800 回答