$ echo -e "AsometAhingA\nsomethingA\nASomethiAng"
AsometAhingA
somethingA
ASomethiAng
$ echo -e "AsometAhingA\nsomethingA\nASomethiAng" | sed "s/A//"
sometAhingA
something
SomethiAng
$
我知道这sed "s/A//"
会删除每一行中的第一个匹配项。但我只想删除文本文件或流中的第一个匹配项。我该怎么做?例如:sed -i "MAGIC" file.txt
答案1
不幸的是,MAGIC
不是一个sed
命令,所以你必须使用其他命令:
sed -i '0,/A/ s///' 文件.txt
perl -i -pe'如果(!$changed){s/A//和$changed++;}'文件.txt
echo -e "/A/s///\nwq" | ed 文件.txt
答案2
只要它是 GNU sed(它可能是,因为它是 Fedora),你就应该能够执行以下操作:
sed '0,/RE/{//d;}' file.txt
答案3
如果您的版本sed
(非 GNU)不支持 0 作为行地址,那么您可以执行以下操作:
sed '/A/{s///;:a;n;ba}' file.txt
它按原样打印每一行,直到找到具有模式的一行。然后删除该模式。之后,它从ba
(分支到“a”)循环到:a
(标签“a”),并读取和打印每一行,而无需再次查找模式。