假设有以下字符串:
commandone{alpha} commandtwo{beta} {gamma}commandthree commandtwo{delta}
我想要获得:
commandone{alpha} beta {gamma}commandthree delta
好吧,我正在用正则表达式和sed进行攻击,我很容易找到它是否存在我寻找的模式
/commandtwo {。*} /但没有删除commandtwo和以下两个brakets。一种方法是仅使用子串“ commandtwo {beta} ”和“ commandtwo {delta} ”,但我不知道即使可能或未使用SED。
我正在寻找正则表达式来执行我所描述的操作。 提前谢谢
答案 0 :(得分:2)
这似乎有效:
sed 's/commandtwo{\([^}]*\)}/\1/g' inputfile
示例:
$ echo 'commandone{alpha} commandtwo{beta} {gamma}commandthree commandtwo{delta}'|sed 's/commandtwo{\([^}]*\)}/\1/g'
commandone{alpha} beta {gamma}commandthree delta
答案 1 :(得分:0)
使用awk
$ s="commandone{alpha} commandtwo{beta} {gamma}commandthree commandtwo{delta}"
$ echo "$s" | awk '{for(i=1;i<=NF;i++) if ($i~/commandtwo/){ gsub(/commandtwo|{|}/," ",$i)} }1'
commandone{alpha} beta {gamma}commandthree delta
答案 2 :(得分:0)
假设您要从代码中删除对commandtwo的所有引用(但不是它的参数)可能类似于/commandtwo{(.*?)}/\1