仅删除第一次命中/与 sed 匹配

Lan*_*nes 6 linux fedora sed

$ echo -e "AsometAhingA\nsomethingA\nASomethiAng"
AsometAhingA
somethingA
ASomethiAng
$ echo -e "AsometAhingA\nsomethingA\nASomethiAng" | sed "s/A//"
sometAhingA
something
SomethiAng
$
Run Code Online (Sandbox Code Playgroud)

我知道sed "s/A//"删除每一行中的第一个匹配项。但我只想删除文本文件或流中的第一个匹配项。我怎样才能做到这一点?喜欢:sed -i "MAGIC" file.txt

Mat*_*ier 7

只要它是 GNU sed(它可能是,因为它是 Fedora),你应该能够做到:

sed '0,/RE/{//d;}' file.txt
Run Code Online (Sandbox Code Playgroud)


use*_*686 6

不幸的是,MAGIC不是sed命令,因此您将不得不使用其他东西:

sed -i '0,/A/s///' file.txt
perl -i -pe 'if (!$changed) {s/A// and $changed++;}' file.txt
echo -e "/A/ s///\nwq" | 编辑文件.txt