sed / awk delete equals如果没有后跟3D

时间:2013-03-11 17:49:31

标签: regex sed awk regex-lookarounds

我想删除等号 只有后跟3D。这里有一个例子。

NB2HI4B2F4XWM3LNFZCGK3DJOZSXE6L=PNZSS4Y3PFZZWGSZB5GUTGKPLE=ONZXA33PNZSXEQ

所以这应该成为

NB2HI4B2F4XWM3LNFZCGK3DJOZSXE6LPNZSS4Y3PFZZWGSZB5GUTGKPLEONZXA33PNZSXEQ

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

4 个答案:

答案 0 :(得分:1)

很遗憾sedawk都不支持look-arounds,您真的希望在此处使用否定预测来匹配所有=未跟随3D (?!3D)pythonperl都支持环视。

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

答案 1 :(得分: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

答案 2 :(得分:0)

另一个:

awk 'NR>1 && /^3D/{print RS}1' RS=\\= ORS= file

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed 's/=3D/\n/g;s/=//g;s/\n/=3D/g' file