繁体   English   中英

如何使用sed更改“{”和“}”之间的内容?

[英]How to change the contents between “{” and “}” using sed?

例如,我们有一个文件,如:

{abc}...{def}

如何在{}内的每个字符串的末尾追加123 ,同时删除{} 以上内容将改为:

abc123...def123

使用此sed:

echo "$s"|sed 's/{\([^}]*\)}/\1123/g'
abc123...def123

或者使用awk:

awk -v x=123 -F '[{}]' '{for(i=1; i<=NF; i++) if (i%2) printf $i, OFS; else printf $i x, OFS; print ""}'
abc123...def123

您可以使用sed捕获组

echo '{abc}...{def}' | sed 's/{\([^}]*\)}/\1123/g'
abc123...def123
sed 's/{//g; s/}/123/g'

测试:

kent$  echo "{abc}...{def}"|sed 's/{//g; s/}/123/g' 
abc123...def123

使用gnu awk

echo '{abc}...{def}' | awk '{print gensub(/{([^}]*)}/,"\\1123","g")}'
abc123...def123

这可能适合你(GNU sed):

sed ':a;s/{\([^{}]*\)}/\1123/g;ta' file

要么:

sed -e ':a' -e 's/{\([^{}]*\)}/\1123/g' -e 'ta' file

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM