I am using sed
to remove the new line and replace with <br>
but I am not able to get the desired output.
I wrote:
find . -name $1 -print0 | xargs -0 sed -i '' -e 's|\n|ABC|g'
...but this doesn't work.
Your sed expression is treating each line separately - so it doesn't actually read the newline character into the pattern buffer and hence can't replace it. If you just want to add <br>
while retaining the actual newline as well, you can just use the end-of-line marker $
and do
sed -i'' 's|$|<br>|' file
Note that the empty backup file name - if you use it - must directly follow the -i
like -i''
; also the -e
is not necessary when using a single expression.
OTOH if you really want to replace actual newline characters, you need to jump through some extra hoops, for example
sed -i'' -e :a -e '$!N;s/\n/<br>/;ta' -e 'P;D' file
or, more compactly
sed -i'' ':a; $!N; s|\n|<br>|; ta; P;D' file
which read successive pairs of lines into the pattern buffer and then replace the intervening newline - see Famous Sed One-Liners Explained.
If you want to replace the new line and with <br>
, you can use
find . -name $1 -print0 | xargs -0 sed -i 's/.*$/&<br\>/'
Why not just
find . -name $1 | xargs sed -ri "s/$/<br>/"
?
(Try without the i
, first ;-) )
To replace inline \n
with <br>
, just use perl (or sed), needless to call find
for that task:
perl -pi -e "s/$/<br>/" myfile
Or for an alias:
alias brtag='perl -pi -e "s/$/<br>/" $1'
find
results a bit more elegantly with the-exec
action:find . -name $1 -exec sed -i '' -e 's|\n|ABC|g' \{\} +
tr '\n' '<br>' < file