Sed 仅在包含其他关键字的行中更改文件中的关键字
我有一个以两个可能的关键字开始的文件,Sed 仅在包含其他关键字的行中更改文件中的关键字,sed,osx-yosemite,Sed,Osx Yosemite,我有一个以两个可能的关键字开始的文件,ATOM和hetam。在其中一些行中,还有第二个关键字HOH,出现在一些其他字符之后。在其他行中,还有其他3个字符的关键字XXX,如SOL,而不是HOH: ATOM 1231 O XXX ... HETATM1232 O SOL ... HETATM1233 O HOH ... 我要做的是,仅当HOH也出现在行中时,才将hetams更改为ATOM 我尝试了以下方法: sed -E '/\(HETATM\)\(.*HOH\)/s//\1ATOM
ATOM
和hetam
。在其中一些行中,还有第二个关键字HOH
,出现在一些其他字符之后。在其他行中,还有其他3个字符的关键字XXX
,如SOL
,而不是HOH
:
ATOM 1231 O XXX ...
HETATM1232 O SOL ...
HETATM1233 O HOH ...
我要做的是,仅当HOH
也出现在行中时,才将hetam
s更改为ATOM
我尝试了以下方法:
sed -E '/\(HETATM\)\(.*HOH\)/s//\1ATOM/' file
这会导致非法字节序列
错误。我做错了什么?试试这个:
sed '/HOH/s/HETATM/ATOM/' file
输出:
ATOM 1231 O XXX ...
HETATM1232 O SOL ...
ATOM1233 O HOH ...
原子1231xxx。。。
HETATM123O溶胶。。。
阿托奥霍。。。
仅在包含
HOH
搜索HETATM
并替换为ATOM
的行中,它确实给出了所需的输出,但在最后也给出了相同的错误。实际上,它并没有打印所有文件。它停在14095行。好吧,我想是因为我在那行有一个奇怪的角色。当我执行head-n10000文件| sed'/HOH/s/hetam/ATOM/“
时,它工作正常。谢谢