[英]How can I use RegEx to find a term, if the term is broken by a new-line in the searched text
[英]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鍵以插入換行符。
為了便於使用,我個人經常使用
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.