我必须在文件中搜索包含特定单词的行,然后按如下方式编辑这些行。其他行应保持不变。 例如:
eltu r21, r24, r23
brz r21, outer_end
add r27, r0, r25
jp outer_end
add r27, r0, r22
outer_end:
修改为:
eltu r21, r24, r23
line2: brz r21, $(outer_end-line2)
add r27, r0, r25
line4: jp $(outer_end-line4-4)
add r27, r0, r22
outer_end:
任何人都可以帮助如何使用 AWK 来实现这一目标。
问候
最佳答案
awk解决方案:
$ cat tst.awk
/brz|jp/{
last=$NF;
NF--;
printf("line%s:\t%s $(%s-line%s)\n", NR, $0, last, NR); next }
NF>1{ print $0; next }
{ print $1 }
解释:
当brz
或jp
匹配时,将最后一个字段保存在last
中,用NF--
移除最后一个字段并打印结果行。
如果它是包含多个字段 NF>1
的行,则只打印它。
最后一种可能性是标签行,只需要打印第一个字段。
在行动:
awk -f tst.awk input.txt
eltu r21, r24, r23
line2: brz r21, $(outer_end-line2)
add r27, r0, r25
line4: jp $(outer_end-line4)
add r27, r0, r22
outer_end:
关于linux - 编辑唯一匹配某个单词的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46121386/