【问题标题】:replace pattern *替换模式 *
【发布时间】:2012-12-25 18:16:10
【问题描述】:

如果行以“LOADS*”开头并且该行的最后一个字符不是“*”,我正在尝试在位置 72 添加一个“*”字符,并且还添加一个新行第 1 列的“*”字符。

输入

LOAD*   720010013       1.5             1.0300          710010013
LOAD*   730010013       1.5             1.0300          710010013       *
*       10.73           1000001
LOAD*   720010014       1.5             1.0300          710010014       *
*
LOAD*   730010014       1.5             1.0300          710010014       *
*       10.73           1000001
LOAD        10013       1.5             1.0300              10013

输出

LOAD*   720010013       1.5             1.0300          710010013       *
*
LOAD*   730010013       1.5             1.0300          710010013       *
*       10.73           1000001
LOAD*   720010014       1.5             1.0300          710010014       *
*
LOAD*   730010014       1.5             1.0300          710010014       *
*       10.73           1000001
LOAD        10013       1.5             1.0300              10013

【问题讨论】:

    标签: linux sed awk tr


    【解决方案1】:

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

    sed '/^LOAD\*.*[^*]$/!b;:a;/.\{72\}/!s/$/ /;ta;s/\(.\{72\}\).*/\1*\n*/' file
    

    注意使用您的测试数据,* 似乎需要在第 73 列。

    【讨论】:

      【解决方案2】:

      一种方式:

      awk '/^LOAD\*/{if (substr($0,73,1)!="*"){x=sprintf("%-72s%c",substr($0,0,72), "*"); $0=x "\n*";}}1' file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-13
        • 2012-03-05
        相关资源
        最近更新 更多