我想删除等号 只有不后跟3D。这里有一个例子。
NB2HI4B2F4XWM3LNFZCGK3DJOZSXE6L=PNZSS4Y3PFZZWGSZB5GUTGKPLE=ONZXA33PNZSXEQ
所以这应该成为
NB2HI4B2F4XWM3LNFZCGK3DJOZSXE6LPNZSS4Y3PFZZWGSZB5GUTGKPLEONZXA33PNZSXEQ
如果可以,我可以在awk
和sed
中找到解决方案吗?我知道这里有很多关于如何做到的解释,但是正则表达式在开始时并不那么容易。
答案 0 :(得分:1)
很遗憾sed
和awk
都不支持look-arounds,您真的希望在此处使用否定预测来匹配所有=
未跟随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
答案 1 :(得分:0)
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