【问题标题】:How to replace a content on specific patter using sed without losing info?如何在不丢失信息的情况下使用 sed 替换特定模式的内容?
【发布时间】:2021-12-14 16:57:37
【问题描述】:

我有一个包含大量数据的文本文件。我能够使用 sed 准确提取我想要的内容;但 我只需要替换我搜索的特定模式,而不会丢失文件中的其他内容。

我正在使用以下 sed 命令;但我需要更换;但不知道怎么做。

cat file.txt | sed -rn '/([a-z0-9]{2}\s){6}/p' > output.txt

sed 搜索以下模式:## ## ## ## ## ##,但我想像这样替换该模式:######-######。

cat file.txt | sed -rn '/([a-z0-9]{2}\s){6}/p' > output.txt
Output:

1         | ec eb b8 7b e3 c0  47                
9         | 90 20 c2 f6 3d c0  1/1/1             
25        | 00 fd 45 3d a7 80  31

Desired Output:

1         | ecebb8-7be3c0  47                
9         | 9020c2-f63dc0  1/1/1             
25        | 00fd45-3da780  31

Thanks

【问题讨论】:

    标签: awk sed


    【解决方案1】:

    使用您展示的示例,请尝试关注awk 程序。

    awk '
    BEGIN{ FS=OFS="|" }
    {
      $2=substr($2,1,3) substr($2,5,2) substr($2,8,2)"-" substr($2,11,2) substr($2,14,2) substr($2,17,2) substr($2,19)
    }
    1
    '  Input_file
    

    解释: 简单的解释是,为awk 程序设置FSOFS|。然后在第二个字段中使用awksubstr 函数根据所示的OP 样本只保留所需的值。其中substr 函数适用于打印特定索引/位置数值的方法(例如:从哪个值到您需要打印的值)。然后将所需的值保存到第二个字段本身并打印当前行。

    【讨论】:

      【解决方案2】:

      awk:

      awk '{$3=$3$4$5"-"$6$7$8; print $1"\t",$2,$3,$NF}' file
      1        | ecebb8-7be3c0 47
      9        | 9020c2-f63dc0 1/1/1
      25       | 00fd45-3da780 31
      

      【讨论】:

        【解决方案3】:

        这可能对你有用(GNU sed):

        sed -E 's/ (\S\S) (\S\S) (\S\S)/ \1\2\3/;s//-\1\2\3/' file
        

        模式匹配 3 对间隔两次,删除第 2 对和第 3 对之间的空格并将第 2 对匹配中的第一个空格替换为 -

        【讨论】:

        • 太棒了!..这条线很简单,效果很好。
        【解决方案4】:

        如果您想提取特定的子字符串,您需要编写更具体的正则表达式来准确提取这些子字符串。

        sed -rn '/([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})\s/\1\2\3-\4\5\6/' file.txt > output.txt
        

        还要注意避免useless cat. 是多么容易

        \s 一般不可移植; POSIX 等效项是 [[:space:]]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-14
          • 2015-01-10
          • 2017-01-01
          • 2021-04-26
          • 2012-10-28
          相关资源
          最近更新 更多