【问题标题】:How to get the lines from a file where a particular string is repeating more than once in each line?如何从文件中获取特定字符串在每行中重复多次的行?
【发布时间】:2011-12-06 22:44:00
【问题描述】:

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

10,Bob,elec,Bob,hero,,,

20,Bob,mech,steve,juni,,,yumm

30,Bob,instr,Bob,sen

40,Bob,comps,alex,juni,syu,,,

50,Bob,chem,Bob,Bob,seni

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

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

10,Bob,elecBob,hero,,,

20,Bob,mech,steve,juni|||Bob,yummBob

30,BobExtarvagnaxz|||

我尝试了几个选项,但没有找到确切需要的选项。

谢谢 切坦

【问题讨论】:

    标签: perl unix awk solaris nawk


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的帮助!!但是,我的问题没有输入和输出。它有 2 个不同版本的输入文件。
    • 哦,我认为第二个代码块是您期望的输出。 ^_^
    【解决方案2】:

    您可以使用正则表达式。

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        以下将打印出在同一行上重复任何 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-11-07
          • 2019-02-22
          • 2018-12-03
          • 1970-01-01
          • 2014-08-03
          • 2011-02-06
          • 1970-01-01
          相关资源
          最近更新 更多