【问题标题】:How to trim specific text with grep如何使用 grep 修剪特定文本
【发布时间】:2011-06-08 19:40:52
【问题描述】:

我需要用 grep 修剪一些文本,我尝试了各种其他方法,但运气不佳,例如:

C:\Users\Admin\Documents\report2011.docx: My Report 2011
C:\Users\Admin\Documents\newposter.docx: Dinner Party Poster 08

如何修剪文本文件,因此修剪“:”及其后面的所有字符。

例如所以输出会是这样的:

C:\Users\Admin\Documents\report2011.docx
C:\Users\Admin\Documents\newposter.docx

【问题讨论】:

  • 你必须用 grep 来做?
  • @George Kastrinis 类似的东西,GNU 和所有......
  • 如果您可以使用 GNU 工具,请尝试cut

标签: linux bash awk grep


【解决方案1】:

使用grep -o 很简单:

$ grep -o '^C:[^:]*' input
C:\Users\Admin\Documents\report2011.docx
C:\Users\Admin\Documents\newposter.docx

如果您可以使用其他驱动器,只需将 C 替换为 .

$ grep -o '^.:[^:]*' input

如果一行可以以不同于驱动器名称的名称开头,您可以考虑在该行的开头出现驱动器名称以及没有驱动器名称的情况:

$ grep -o '^\(.:\|\)[^:]*' input

【讨论】:

    【解决方案2】:

    使用 awk?

    awk -F: '{print $1':'$2}' inputFile > outFile
    

    你可以使用 grep (注意 -o 只返回匹配的文本)

    grep -oe "^C:[^:]" inputFile > outFile 
    

    【讨论】:

      【解决方案3】:

      cat inputFile | cut -f1,2 -d":"

      -d 指定您的分隔符,在本例中为“:”。 -f1,2 表示您需要第一个和第二个字段。

      第一部分不一定是cat inputFile,它只是获取您引用的文本所需的任何内容。关键部分是cut -f1,2 -d":"

      【讨论】:

      • 这将消除 C:/ 中的第一个 ':' 也不需要 cat 和 pipe cut -f1,2 -d":" inputFile 应该可以工作
      • @matchew,似乎它会摆脱第一个“:”但它不适合我。很奇怪。
      • 所以我刚刚试了一下,你说得对。它没有删除第一个:这把我扔了。然后我尝试了 -f1,3 并注意到两个:仍然存在。我想 cut 的工作方式与我想象的不同。为你 +1 =)
      • @matchew,谢谢。这也让我感到惊讶,但我又一次主要使用空格和制表符作为分隔符,所以我可能会注意到。仅供参考,您可以使用参数 --output-delimiter=STRING 输出任何内容来代替分隔符。
      【解决方案4】:

      您的文本看起来像 grep 的输出。如果您要问的是如何打印与模式匹配的文件名,请使用 GNU grep 选项 --files-with-matches

      【讨论】:

        【解决方案5】:

        您也可以将其用于您的示例

        grep -E -o "^C\S+"| tr -d ":"
        egrep -o "^C\S+"| tr -d ":"
        

        \S 这里是非空格字符匹配

        【讨论】:

          猜你喜欢
          • 2013-10-13
          • 2019-03-08
          • 2011-03-05
          • 2021-02-26
          • 1970-01-01
          • 2016-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多