использование sed заменяет новую строку символом

Я использую sed удалить новую строку и замену <br> но я не могу получить желаемый вывод.

Я записал:

find . -name $1 -print0 | xargs -0 sed -i '' -e 's|\n|ABC|g'

... но это не работает.

3
задан 25 December 2018 в 12:27

4 ответа

Ваше sed выражение рассматривает каждую строку отдельно - таким образом, это на самом деле не читает символ новой строки в буфер шаблона и следовательно не может заменить его. Если Вы просто хотите добавить <br> при сохранении фактической новой строки также, можно просто использовать маркер $ конца строки и сделать

sed -i'' 's|$|<br>|' file

Примечание, за которым пустое имя файла резервной копии - при использовании его - должно непосредственно следовать -i как -i''; также эти -e не необходимо при использовании отдельного выражения.

OTOH, если Вы действительно хотите заменить фактические символы новой строки, необходимо перейти через некоторые дополнительные обручи, например

sed -i'' -e :a -e '$!N;s/\n/<br>/;ta' -e 'P;D' file

или, более сжато

sed -i'' ':a; $!N; s|\n|<br>|; ta; P;D' file

, которые читают последовательный пары из строк в буфер шаблона и затем заменяют прошедшую новую строку - см. Известные Остроты Sed, Объясненные .

2
ответ дан 1 December 2019 в 17:05

Если Вы хотите заменить новую строку и <br>, можно использовать

 find . -name $1 -print0 | xargs -0 sed -i 's/.*$/&<br\>/'
0
ответ дан 1 December 2019 в 17:05

Почему не всего

find . -name $1 | xargs sed -ri "s/$/<br>/"

?

(Попытка без эти i, сначала;-))

0
ответ дан 1 December 2019 в 17:05

Для замены встроенный \n <br> просто используйте жемчуг (или sed), бесполезный для вызова find к той задаче:

perl -pi -e "s/$/<br>/" myfile

Или для псевдонима:

alias brtag='perl -pi -e "s/$/<br>/" $1'
0
ответ дан 1 December 2019 в 17:05

Другие вопросы по тегам:

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