在命令行上替换文本文件中的\ r \ n

时间:2016-11-02 12:52:24

标签: bash sed

我正在尝试使用\r\n替换文本文件中的每个<p/>

我试过以下但没有运气:

sed 's#\r\n#<p/>#g' test.txt
sed 's#\r\n#<p/>#g' test.txt
sed 's#/\r/\n#<p/>#g' test.txt
sed ':a;N;$!ba;s/\r\n/<p/>/g' test.txt

以下是text.txt

中的文字
https://www.pivotaltracker.com/story/\r\nhttps://www.pivotaltracker.com/story\r\n\r\nSome business text.\r\n\r\nSome business text. Task 123 is still a work in progress but we wanted it in develop to keep everything updated.

3 个答案:

答案 0 :(得分:4)

所有其他答案都假设您正在尝试处理Windows样式的行结尾并将其更改为段落标记。

要将字符序列\r\n更改为其他内容,只需使用全局替换:

sed 's!\\r\\n!<p/>!g' file

\本身需要转义。

答案 1 :(得分:1)

使用perl单行比使用sed更容易操作行结尾。这是完全未经测试的,但是应该工作(在我看来,唯一的问题是perl是否可以在最近进行通用换行处理,在这种情况下你永远不会看到\r):< / p>

perl -e 'undef $/; while (<>) { s:\r\n:<p/>:g; print; }' test.txt > xtest.txt

或等效

perl -pe 'BEGIN { undef $/ } s:\r\n:<p/>:g' test.txt > xtest.txt

密钥在开头是undef $/,这使得perl将整个test.txt读作一个大的长字符串;显而易见的正则表达式然后Just Works。

答案 2 :(得分:1)

cat file | tr -d '\r' | sed 's|$|</p>|g' | tr -d '\n'