使用 sed 将新行替换为字符

使用 sed 将新行替换为字符

我正在使用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'

相关内容