替换模式*

时间:2013-01-11 07:23:00

标签: linux sed awk tr

我试图添加" *"如果行以" LOADS*"开头,则在第72位的字符;该行的最后一个特征不是" *"并添加一个新行" *"第1栏的字符。

INPUT

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

2 个答案:

答案 0 :(得分:1)

一种方式:

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

答案 1 :(得分:0)

这可能适合你(GNU sed):

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

N.B。使用您的测试数据{73}似乎需要*