簡體   English   中英

如何在BSD sed中使用換行?

[英]How do I use a new-line replacement in a BSD sed?

問候,如何在BSD sed中執行以下操作?

sed 's/ /\n/g'

它從man-page聲明\\ n將在替換字符串中字面處理,我該如何避免這種行為? 有備用嗎?

我正在使用Mac OS Snow Leopard,我可能會安裝fink來獲得GNU sed。

在shell中,您可以:

    sed 's/ /\
/g'

在反斜杠后按Enter鍵以插入換行符。

其他方式:

sed -e 's/ /\'$'\n/g'

看到這里

為了便於使用,我個人經常使用

cr="\n" 
# or (depending version and OS)
cr="
"

sed "s/ /\\${cr}/g"

所以它保持在1行。

要擴展@ sikmir的答案:在Bash中,這是Mac OS X上的默認shell,您需要做的就是在包含要解釋的轉義序列的帶引號的字符串前放置一個$字符。 Bash會自動為您翻譯。

例如,我從lib/所有源文件中刪除了所有MS-DOS回車符,並include/通過編寫:

grep -lr $'\r' lib include | xargs sed -i -e $'s/\r//'
find . -name '*-e' -delete

BSD grep會自己正確地解釋'\\r' ,但使用$'\\r'並沒有傷害。

BSD sed會單獨誤解's/\\r//' ,但是通過使用$'s/\\r//' ,我避免了這個陷阱。

請注意,我們可以將$放在整個字符串的前面,它將處理整個字符串中的所有轉義序列。

$ echo $'hello\b\\world'
hell\world

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM