Как искать '/>' с помощью sed

Как искать '/>' с помощью sed

Мне нужно добавить новую строку после первой />для всех файлов в каталоге.

Вот мой сценарий:

#!/bin/bash

find ./ -type f -print0 | while IFS= read -r -d '' myfile; do
    sed -i '0,/\/>/asome text here' $myfile
done

Однако, похоже, что все из \nтакже совпадают. Например, если файл выглядит так:

abc
def
<abc/>
<abc/>

После выполнения моего скрипта я получу следующий результат:

abc
some text here
def
some text here
<abc/>
some text here
<abc/>

Он добавляет новую строку для первого вхождения />, но он также добавляет новую строку для каждой строки перед первой />.

решение1

Да. Выражение 0,/regex/приведет к тому, что следующая за ним команда ( a) будет применена квсе строкидо (и включая) первого совпадения регулярного выражения.

Я предполагаю, что вместо этого вы бы хотели сделать

sed -i '0,/regex/{//a text
}' "$myfile"

Это позволит выбрать все строки до первого совпадения с регулярным выражением, а затем применить команду только к той строке в этом диапазоне, которая соответствует выражению, при этом все остальные строки будут пропущены без изменений.

Буквальный символ новой строки необходим для обозначения конца добавляемого вами текста.

Связанный контент