从标准输出中修改字符串中的数值

问题描述 投票:0回答:1

我有要重写和修改某些数字值的输入字符串:

输入src/main.tsx(2,31): error TS2304: Cannot find name 'foo'.

所需输出src/main.tsx:1:30: error: TS2304: Cannot find name 'foo'.

请注意,数值已减少1。到目前为止,我有以下内容:

sed -E "s/^([^(]+)\(([0-9]+),([0-9]+)\): ((warning)|(error)) (.*)/\1:\2:\3: \4: \7/"

除数字操作外,此方法有效。根据我的阅读,我相信sed不是适合该工作的工具。我看着awk,但正则表达式捕获组碰壁了。

我正在使用MacOS。该命令不需要是可移植的。我很高兴使用brew安装其他工具。

shell awk sed text-parsing
1个回答
0
投票

您能不能尝试以下操作。

awk '
match($0,/\([^)]*/){
  value=substr($0,RSTART+1,RLENGTH-1)
  num=split(value,array,",")
  for(i=1;i<=num;i++){
    val=(val?val":":"")array[i]-1
  }
  print substr($0,1,RSTART-1) ":" val substr($0,RSTART+RLENGTH+1)
  value=""
}'  Input_file

输出如下。

src/main.tsx:1:30: error TS2304: Cannot find name 'foo'.
© www.soinside.com 2019 - 2024. All rights reserved.