删除字符串固定及可变部分

问题描述:

我有以下的字符串删除字符串固定及可变部分

.VBP (<variable string>) 

我想匹配使用.VBP图案和除去上方的整个图案。我怎样才能使用sed? 请注意,上述模式与其他模式存在于同一行中。我想删除这个模式并且保持整条线路不变。

$ sed -r 's/^(.*)\.VBP\s\([^\)]*\)(.*)/\1\2/g' 
text before .VBP (randomtextrandomtextfndljknhd) text after 
text before text after 
texttext .VBP (abcd) text 
texttext text 
$ 

编辑:因为您提供了示例文本。它没有像你在你的问题中提到的空间。下面是修改后的版本:

$ sed -r 's/^(.*)\.VBP\s*\([^\)]*\)(.*)/\1\2/g' 
SEN_BUF_S_1 pnr_postcts1(.X(n1),.A(sync_ff0_s),.VSS(vssd_digstby) ,.VDD(vddd1v_dig),.VBN(vssd_digstby),.VBP(vddd1v_dig)); 
SEN_BUF_S_1 pnr_postcts1(.X(n1),.A(sync_ff0_s),.VSS(vssd_digstby) ,.VDD(vddd1v_dig),.VBN(vssd_digstby),); 
$ sed -r 's/^(.*),\.VBP\s*\([^\)]*\)(.*)/\1\2/g' 
SEN_BUF_S_1 pnr_postcts1(.X(n1),.A(sync_ff0_s),.VSS(vssd_digstby) ,.VDD(vddd1v_dig),.VBN(vssd_digstby),.VBP(vddd1v_dig)); 
SEN_BUF_S_1 pnr_postcts1(.X(n1),.A(sync_ff0_s),.VSS(vssd_digstby) ,.VDD(vddd1v_dig),.VBN(vssd_digstby)); 
$ 

这里是 sed -r 's/^(.*),\.VBP\s*\([^\)]*\)(.*)/\1\2/g'

-r开关explanantion启用扩展正则表达式(ERE)
s是用于与替换字符串

代正则表达式匹配sed命令
^    matches start of line anchor 
(.*),   matches any char (.) 0 or more times(*)(group 1) followed by a literal comma 
\.VBP   matches a literal dot and VBP 
\s*    \s stands for white-space (tab, spaces etc), match it 0 or more times 
\(    match a literal opening round bracket 
[^\)]*   matches any character i.e not a closing bracket 0 or more times 
\)    match a literal closing round bracket 
(.*)   match the rest of the line (any char 0 or more times)=group2 

用组1和组2替换给出模式前后的字符串。

+0

不幸的是没有工作。字符串保持不变。 –

+0

示例文本 'SEN_BUF_S_1 pnr_postcts1(.X(N1),. A(sync_ff0_s),. VSS(vssd_digstby) ,.VDD(vddd1v_dig),. VBN(vssd_digstby),. VBP(vddd1v_dig));' –

+0

它完美地工作。 你能否提供一些解释?这会很棒。 谢谢 –