【问题标题】:sed remove and replace certain matchsed 删除并替换某些匹配项
【发布时间】:2013-11-13 14:29:48
【问题描述】:

我在一个文件中有以下内容。

A 01/13/13 \\0101 \\0102 \\0103
C 04/19/13 \\0301 \\0302 \\0303 \\0304 \\0305
F 04/05/13 \\0602 \\0603 \\0604

我想用行首的字母和下划线替换第一个\\。它总是一个字母。然后删除所有内容。如果有帮助的话,每一行之间只有一个空格。

期望的结果应该是

A 01/13/13 A_0101
C 04/19/13 C_0301
F 04/05/13 F_0602

我尝试使用 grep,我如何使用 sed 做到这一点?

【问题讨论】:

    标签: regex bash unix sed


    【解决方案1】:

    一种方法是通过传递-r 标志来启用扩展正则表达式。

    sed -re 's/^(.) (\S+) \\\\(\S+).*$/\1 \2 \1_\3/' file
    

    输出

    A 01/13/13 A_0101
    C 04/19/13 C_0301
    F 04/05/13 F_0602
    

    【讨论】:

      【解决方案2】:

      可能更适合处理此问题

      awk '{sub(/../, $1"_", $3); print($1, $2, $3)}' file.txt
      A 01/13/13 A_0101
      C 04/19/13 C_0301
      F 04/05/13 F_0602
      

      【讨论】:

        【解决方案3】:

        你也可以像这样使用awk

        awk '{sub(/\\\\/,x);print $1,$2,$1"_"$3}' file
        A 01/13/13 A_0101
        C 04/19/13 C_0301
        F 04/05/13 F_0602
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-18
          • 1970-01-01
          • 1970-01-01
          • 2016-06-11
          • 1970-01-01
          • 2012-01-03
          • 2022-01-26
          相关资源
          最近更新 更多