我想将“&”替换为&
“除了以下出现的 XML 特殊字符”。
" "
' '
< <
> >
& &
我尝试了中提到的方法替换两个字符串之间的指定字符?和在给定 XML 标记中使用 sed 替换所有“&”,但不将 XML 实体“&”中的“&”替换为“#”似乎不适合我。
答案1
使用 perl 一行:
perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&/g'
该-p
标志使 perl 的行为类似于 sed(循环 STDIN 行、执行操作、打印到 STDOUT),-e
告诉它从参数而不是文件读取命令。
正则表达式替换的作用是:
- 匹配
&
- 没有跟随
quot
或者apos
...amp
- 分号
- 用。。。来代替
&
- 对于所有在线比赛。
像 sed 一样使用它,例如
perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&/g' < my-file.xml
./myscript.sh | perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&/g'