【问题标题】:Strings extraction from text file with sed command使用 sed 命令从文本文件中提取字符串
【发布时间】:2012-07-01 15:35:02
【问题描述】:

我有一个文本文件,其中包含如下几行:

ASDASD2W 3ASGDD12 SDADFDFDDFDD W11 ACC=PNO23 DFSAEFEA EAEDEWRESAD ASSDRE 
AERREEW2 3122312 SDADDSADADAD W12 ACC=HH34 23SAEFEA EAEDEWRESAD ASEEWEE 
A15ECCCW 3XCXXF12 SDSGTRERRECC W43 ACC=P11 XXFSAEFEA EAEDEWRESAD ASWWWW 
ASDASD2W 3122312 SDAFFFDEEEEE SD3 ACC=PNI22 ABCEFEA EAEDEWRESAD ASWEDSSAD 
...

我必须为每一行提取'='字符和以下空格之间的子字符串,即

PNO23
HH34
P11
PNI22

我一直在使用 sed 命令,但不知道如何忽略空格后面的所有字符。

有什么帮助吗?

【问题讨论】:

    标签: string bash shell sed


    【解决方案1】:

    为工作使用正确的工具。

    $ awk -F '[= ]+' '{ print $6 }' input.txt
    PNO23
    HH34
    P11
    PNI22
    

    【讨论】:

    • 毫无疑问 awk 是一个强大的工具,你的代码会对我有很大帮助,但我只是想用 sed 实现相同的结果,即使它更难。
    • 在这种情况下使用 sed 肯定不会更难。在这种情况下,“正确工作的正确工具”是错误的。 Sed 是正确的工具。 awk 更适合表格数据和快速破解和计算。 Sed 使正则表达式变得简单并且更具声明性。看我的回答。
    • @JoSo Sed 语法在某些情况下可能比使用 awk 更容易使用正则表达式,但这不是其中之一。
    • @WilliamPursell:请解释一下。我认为s/.*=//; s/ .*// 非常简单。
    • @JoSo 虽然s/.*=//; s/ .*// 很简单,但[= ]+ 要简单得多。
    【解决方案2】:

    很抱歉,但我觉得现有的答案太复杂了,所以必须添加另一个答案

    sed 's/.*=//; s/ .*//;' inputfile
    

    【讨论】:

      【解决方案3】:

      这可能对你有用:

      sed -n 's/.*=\([^ ]*\).*/\1/p' file
      

      或者,如果您愿意:

      sed 's/.*=\([^ ]*\).*/\1/p;d' file
      

      【讨论】:

        【解决方案4】:

        将要捕获的字符串放入反向引用中:

        sed 's/.*=\([^ =]*\) .*/\1/'
        

        或零散地进行替换;

        sed -e 's/.*=//' -e 's/ .*//'
        

        【讨论】:

          【解决方案5】:
          sed 's/[^=]*=\([^ ]*\) .*/\1/' inputfile
          

          匹配所有非等号字符和一个等号。捕获一系列非空格字符。匹配一个空格和该行的其余部分。替换捕获的字符串。

          【讨论】:

            【解决方案6】:

            grep 链可以解决问题。

            grep -o '[=][a-zA-Z0-9]*' file | grep -o '[a-zA-Z0-9]*'
            

            【讨论】:

              猜你喜欢
              • 2023-03-14
              • 1970-01-01
              • 2022-01-08
              • 1970-01-01
              • 2020-12-11
              • 2023-04-04
              • 1970-01-01
              • 2012-02-09
              相关资源
              最近更新 更多