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/“
时,它工作正常。谢谢