1

仅当不跟随 3D时,我才想删除等号。这里有一个例子。

NB2HI4B2F4XWM3LNFZCGK3DJOZSXE6L=PNZSS4Y3PFZZWGSZB5GUTGKPLE=ONZXA33PNZSXEQ

所以这应该变成

NB2HI4B2F4XWM3LNFZCGK3DJOZSXE6LPNZSS4Y3PFZZWGSZB5GUTGKPLEONZXA33PNZSXEQ

如果可能的话,我可以在awkand中找到解决方案sed吗?我知道这里有很多关于如何做到这一点的解释,但正则表达式一开始并不那么容易。

4

4 回答 4

1

不幸的是,既不sed也不awk支持环视,你真的想在这里使用负前瞻来匹配所有=没有跟随的 3D (?!3D)。两者都python支持perl环视。

一种方法python

>>> import re
>>> print re.sub('=(?!3D)','','=3D=3=1=D3D====3D')
=3D31D3D=3D

一种方法perl

$ perl -pe 's/=(?!3D)//g' <<< "=3D=3=1=D3D====3D" 
=3D31D3D=3D
于 2013-03-11T18:10:48.100 回答
0

又脏又快的 awk 单线:

awk '{gsub(/=3D/,"\x99");gsub(/=/,"");gsub(/\x99/,"=3D")}1' file

测试:

kent$  echo "====xxx==yy=3D=3Dyy==zz=3D="|awk '{gsub(/=3D/,"\x99");gsub(/=/,"");gsub(/\x99/,"=3D")}1'     
xxxyy=3D=3Dyyzz=3D
于 2013-03-11T18:01:08.987 回答
0

这可能对您有用(GNU sed):

sed 's/=3D/\n/g;s/=//g;s/\n/=3D/g' file
于 2013-03-12T13:03:00.350 回答
0

另一个:

awk 'NR>1 && /^3D/{print RS}1' RS=\\= ORS= file
于 2013-03-11T19:39:46.410 回答