我必须在文件中搜索包含某些特定单词的行,然后按如下方式编辑这些行。其他行应保持不变。 例如:
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来实现这一目标。
此致
答案 0 :(得分:0)
假设那些前导“ line#:”是说明输出应该在哪里而不是实际数据,这里是一个两个调用pod install
方法:
sed
输出:
sed '/brz\|jp/{=;s/[^ ]*$/\$\(&-line/}' input_file.asm |
sed -n '/^[0-9]$/{h;n;G;s/\n//;s/$/\)/};p'
注意: eltu r21, r24, r23
brz r21, $(outer_end-line2)
add r27, r0, r25
jp $(outer_end-line4)
add r27, r0, r22
outer_end:
在这里很笨,因为sed
会立即打印行号,这太早了。因此需要 2nd =
来重新排列它所属的行号。
答案 1 :(得分:0)
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: