我正在使用sed
删除新行并替换<br>
但无法获得所需的输出。
我写:
find . -name $1 -print0 | xargs -0 sed -i '' -e 's|\n|ABC|g'
...但是这不起作用。
答案1
您的 sed 表达式将每行分开处理 - 因此它实际上不会将换行符读入模式缓冲区,因此无法替换它。如果您只想添加<br>
同时保留实际的换行符,则只需使用行尾标记$
并执行
sed -i'' 's|$|<br>|' file
请注意,如果使用空备份文件名,则必须直接跟在类似的后面-i
;-i''
此外,-e
使用单个表达式时没有必要。
另一方面,如果你真的想替换实际的换行符,你需要跳过一些额外的步骤,例如
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
如果你想用 替换新行和<br>
,你可以使用
find . -name $1 -print0 | xargs -0 sed -i 's/.*$/&<br\>/'
答案3
为什么不只是
find . -name $1 | xargs sed -ri "s/$/<br>/"
?
(先尝试不加i
, ;-))
答案4
\n
要用替换 inline <br>
,只需使用 perl(或 sed),无需调用find
该任务:
perl -pi -e "s/$/<br>/" myfile
或者使用别名:
alias brtag='perl -pi -e "s/$/<br>/" $1'