Я использую sed
удалить новую строку и замену <br>
но я не могу получить желаемый вывод.
Я записал:
find . -name $1 -print0 | xargs -0 sed -i '' -e 's|\n|ABC|g'
... но это не работает.
Ваше 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, Объясненные .
Если Вы хотите заменить новую строку и <br>
, можно использовать
find . -name $1 -print0 | xargs -0 sed -i 's/.*$/&<br\>/'
Почему не всего
find . -name $1 | xargs sed -ri "s/$/<br>/"
?
(Попытка без эти i
, сначала;-))
Для замены встроенный \n
<br>
просто используйте жемчуг (или sed), бесполезный для вызова find
к той задаче:
perl -pi -e "s/$/<br>/" myfile
Или для псевдонима:
alias brtag='perl -pi -e "s/$/<br>/" $1'