仅在包含另一个关键字的行中更改文件中的关键字

Change keyword in a file only in the lines that contain another keyword

我的文件中的行以两个可能的关键字 ATOMHETATM 开头。在其中一些行中,有第二个关键字 HOH,出现在其他一些字符之后。在其他行中,还有其他 3 个字符的关键字 XXX,例如 SOL 而不是 HOH:

ATOM  1231  O  XXX ...
HETATM1232  O  SOL ...
HETATM1233  O  HOH ...

我想做的是仅当 HOH 也出现在行上时才将 HETATMs 更改为 ATOM

我尝试了以下方法:

sed -E '/\(HETATM\)\(.*HOH\)/s//ATOM/' file

给出 illegal byte sequence 错误。我做错了什么?

试试这个:

sed '/HOH/s/HETATM/ATOM/' file

输出:

ATOM  1231  O  XXX ...
HETATM1232  O  SOL ...
ATOM1233  O  HOH ...

仅在包含 HOH 的行中搜索 HETATM 并替换为 ATOM