问题
I am trying to replace each \r\n in a text file with <p/>.
I have tried the following with no luck:
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
Here is the text in 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.
回答1:
All of the other answers have assumed that you are trying to handle Windows-style line endings and change them to paragraph tags.
To change the literal sequence of characters \r\n to something else, just use a global substitution:
sed 's!\\r\\n!<p/>!g' file
The \ themselves need to be escaped.
回答2:
cat file | tr -d '\r' | sed 's|$|</p>|g' | tr -d '\n'
回答3:
Line endings are much easier to manipulate with perl one-liners than with sed. This is totally untested, but should work (the only question in my mind is whether perl might do universal newline handling these days, in which case you'd never see a \r):
perl -e 'undef $/; while (<>) { s:\r\n:<p/>:g; print; }' test.txt > xtest.txt
or equivalently
perl -pe 'BEGIN { undef $/ } s:\r\n:<p/>:g' test.txt > xtest.txt
The key is undef $/ at the beginning, which makes perl read the entire of test.txt as one big long string; the obvious regex then Just Works.
来源:https://stackoverflow.com/questions/40380437/replace-literal-r-n-in-text-file