удалите только сначала хит / соответствие с sed

$ 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

5
задан 18.10.2014, 22:48

3 ответа

К сожалению, MAGIC не a sed команда, таким образом, необходимо будет использовать что-то еще:

sed -i '0,/A/ s///' file.txt
perl -i -pe 'if (!$changed) {s/A// and $changed++;}' file.txt
echo -e "/A/ s///\nwq" | ed file.txt
5
ответ дан 07.12.2019, 16:54

Пока это - GNU sed (который это, вероятно, так как это - Fedora), необходимо смочь сделать:

sed '0,/RE/{//d;}' file.txt
7
ответ дан 07.12.2019, 16:54

Если у Вас есть версия sed (не-GNU), который не поддерживает 0 как адрес строки, затем можно сделать это:

sed '/A/{s///;:a;n;ba}' file.txt

Это печатает каждую строку, как, пока это не находит один с шаблоном. Затем это удаляет шаблон. После этого это циклично выполняется от ba (перейдите к) к :a (маркируйте), и читает и печатает каждую строку, не ища шаблон снова.

2
ответ дан 07.12.2019, 16:54

Теги

Похожие вопросы