在Linux中,你可以使用sed命令配合正则表达式来实现这个需求。下面是一个示例:
sed 's/old_text/new_text/;T' file.txt
这里的命令含义是:
s/old_text/new_text/:这是替换命令,它会查找每一行中的第一个old_text并替换为new_text。;T:如果前面的s命令执行了替换(即该行存在old_text并且成功替换了),则跳过后续命令;否则(即该行不存在old_text或者已经替换过第一个old_text了),继续处理下一行。
这样就实现了只替换每一行的第一个old_text。
然而,需要注意的是,如果old_text包含特殊字符,可能需要进行转义。例如,如果old_text包含斜线(/),你需要写成\/old_text/。如果它包含反斜杠(\),则需要写成\\old_text。
另外,如果你的sed版本不支持;T组合,可以使用以下方式:
sed -E '0,/(old_text)/ s//new_text/' file.txt
这里 -E 参数表示使用扩展正则表达式,0,/(old_text)/ 表示从行首到第一个 old_text 之间的范围,然后在这个范围内执行替换操作,因此只会替换每行的第一个 old_text。