首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将avr-asm转换为arm-gnu注释的sed脚本

将avr-asm转换为arm-gnu注释的sed脚本
EN

Stack Overflow用户
提问于 2020-10-15 17:08:44
回答 2查看 101关注 0票数 4

我希望将出现的每个';‘转换为'@',但前提是没有引号(丢弃此行中的引号)。背后的原因:

arm-asm的汇编语言语法有';‘作为注释符号,后面的所有内容都是注释。尽管有像";“或”;“这样的东西。

我建议使用以下sed脚本作为解决方案,并将其放在讨论中,以防我忽略了什么:

文件% s:

代码语言:javascript
复制
s/^\([^(;\'\")]*\)\(;\)\(.*$\)/\1@\3/

文件测试用例:

代码语言:javascript
复制
;
  ;
;**********;****
  ';'
  ";"
';'
";"
ABC r1,';'
ABC r1,";"
; ";" ';'
;;;

用法:

代码语言:javascript
复制
$ sed -f s testcase
@
  @
@**********;****
  ';'
  ";"
';'
";"
ABC r1,';'
ABC r1,";"
@ ";" ';'
@;;

编辑:我只是发现,例如

代码语言:javascript
复制
        .include "stm32f407.s"      ; target register defines
        .set    PLLP, (DIVP - 2) / 2        ; some other comment

没有通过测试。

编辑:

因此,希望现在可以这样做:

代码语言:javascript
复制
#!/bin/sh
sed -e "s/^\([^(;\'\")]*\)\(;\)\(.*$\)/\1@\3/" -e "s/^\([^;]*\)\(;\)\(.*\)/\1@\3/"  $1

注意:该脚本适用于BSD sed (例如macOS),而不是GNU sed。

EN

回答 2

Stack Overflow用户

发布于 2020-10-15 21:40:01

使用perl (如果perl可用,它比sed更可移植)

代码语言:javascript
复制
perl -pe 's/(?:\x27;\x27|";")(*SKIP)(*F)|;/@/'

  • (?:\x27;\x27|";")(*SKIP)(*F)任何满足(?:\x27;\x27|";")的文本都不会被更改,十六进制alternate
  • use中的单引号g指定应该作为(?:\x27;\x27|";")g perl -i.bkp更改的内容如果您想要替换所有这样的文本如果您想要就地编辑(如果您不想备份,只需-i )
票数 3
EN

Stack Overflow用户

发布于 2020-10-15 19:38:33

这可能适用于您(GNU sed):

代码语言:javascript
复制
sed -E 's/(["'\'']);\1/\1\n\1/g;s/;/@/;y/\n/;/' file

将引号或双引号之间的所有;替换为换行符。

将第一次出现的;替换为@

将所有换行符替换为;

注意:要替换所有匹配项,请使用:

代码语言:javascript
复制
sed -E 's/(["'\'']);\1/\1\n\1/g;y/;/@/;y/\n/;/' file

此解决方案可能适用于所有sed版本:

代码语言:javascript
复制
sed -Ee 'G
        :a
        s/(["'\'']);(\1.*(.))/\1\3\2/
        ta 
        s/;/@/
        :b
        s/(.)(.*\1)$/;\2/
        tb 
        s/.$//' file

它利用了一个空的保留空格附加一个换行符的事实,即G命令附加一个换行符,这可以被捕获并在替换中使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64368280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档