【发布时间】:2021-01-29 17:50:36
【问题描述】:
我想转换每次出现的 ';'到 '@' 中,但前提是它没有被引用(丢弃此行中的引号)。背后的原因:
arm-asm 的汇编语言语法有 ';'作为评论符号和';'之后的所有内容是评论。尽管有';'之类的东西或“;”。
我建议使用以下 'sed' 脚本作为解决方案,并希望对其进行讨论,以防我忽略了什么:
文件:
s/^\([^(;\'\")]*\)\(;\)\(.*$\)/\1@\3/
文件测试用例:
;
;
;**********;****
';'
";"
';'
";"
ABC r1,';'
ABC r1,";"
; ";" ';'
;;;
用法:
$ sed -f s testcase
@
@
@**********;****
';'
";"
';'
";"
ABC r1,';'
ABC r1,";"
@ ";" ';'
@;;
我发现例如
.include "stm32f407.s" ; target register defines
.set PLLP, (DIVP - 2) / 2 ; some other comment
没有通过测试。
所以希望现在可以做到:
#!/bin/sh
sed -e "s/^\([^(;\'\")]*\)\(;\)\(.*$\)/\1@\3/" -e "s/^\([^;]*\)\(;\)\(.*\)/\1@\3/" $1
【问题讨论】:
-
这是 Perl / Unix One-liner Cage Match, Part 1 (perl.com, 2021-05-12) 的主题,“跳过一些匹配项”小节。