使用 sed 有条件替换

tas*_*ear 3 linux bash sed

我的问题可能相当简单。我正在尝试替换文件中行开头的字符串序列。例如,我想将模式“GN”的任何实例替换为“N”,或将“WR”替换为“R”,但前提是它们是该行的前 2 个字符。例如,如果我有一个包含以下内容的文件:

WRONG
RIGHT
GNOME
Run Code Online (Sandbox Code Playgroud)

我想转换这个文件以给出

RONG
RIGHT
NOME
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用以下内容来替换上述示例的任何实例;

sed -i 's/GN/N/g' file.txt
sed -i 's/WR/R/g' file.txt
Run Code Online (Sandbox Code Playgroud)

问题是我希望仅当上述模式是任何给定行中的前 2 个字符时才会发生这种情况。可能是一个 IF 语句,尽管我不确定条件会是什么样子。任何正确方向的指示将不胜感激,谢谢。

kar*_*kfa 5

只需添加扬抑符,删除 g 后缀(不必要,因为您最多需要一个替换),您也可以将它们组合在一个脚本中。

sed -i 's/^GN/N/;s/^WR/R/' file.txt
Run Code Online (Sandbox Code Playgroud)