删除字符串固定及可变部分
问题描述:
我有以下的字符串删除字符串固定及可变部分
.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
是用于与替换字符串
^ 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替换给出模式前后的字符串。
不幸的是没有工作。字符串保持不变。 –
示例文本 'SEN_BUF_S_1 pnr_postcts1(.X(N1),. A(sync_ff0_s),. VSS(vssd_digstby) ,.VDD(vddd1v_dig),. VBN(vssd_digstby),. VBP(vddd1v_dig));' –
它完美地工作。 你能否提供一些解释?这会很棒。 谢谢 –