使⽤sed正则表达式替换前后内容,保留中间匹配不变
概述
⽹上很多正则表达式替换内容艘是通过编辑器操作,⽽没有命令⾏,所以补上⼀个⽤sed的搜索查替换的功能实现内容替换,并保留部分内容。
需求
原⽂件内容
I come from {U+5E7F}{U+5DDE}.
⽬标⽂件内容
I come from \u5E7F\u5DDE.
实现
# echo "I come from {U+5E7F}{U+5DDE}."| sed "s#{U+\([0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]\)}#\\\u\1#g"
正则表达式获取括号内容# I come from \u5E7F\u5DDE.
### or
echo "I come from {U+5E7F}{U+5DDE}."|sed "s/I come from {U+\(.*\)}{U+\(.*\)}/i come from \\\u\1\\\u\2/g"
解析:
代码段 \( \) 内的内容被替换成了\1,⾥⾯可以改成你⾃定义的匹配项,前后部分 ${U+ 和 } 为直观匹配的内容,第⼆部分的#\1#表⽰的就是括号⾃定义匹配的内容
\([0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]\)
尝试替换为 \([^).]*\),可以看到结果是匹配了中间所有内容
# echo "I come from {U+5E7F}{U+5DDE}."| sed "s#{U+\([^).]*\)}#\\\u\1#g"
# I come from \u5E7F}{U+5DDE.
结语
可以思考下能否加⼊多个匹配条件\2\3实现次序的⾃定义等,欢迎有答案的⼩伙伴回复你们的实验结果。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论