我想搜索 - 在bash命令行中替換包含空格的東西,並且我認爲sed是最簡單的方法。sed(在bash中)與[ t]一起使用,但與 s不兼容?
使用[ \t]
表示任一選項卡或空間,以匹配空格,按預期工作:
echo "abc xyz" | sed "s/[ \t]xyz/123/"
abc123
但使用的\s
代替[ \t]
沒有,讓我吃驚:
echo "abc xyz" | sed "s/\sxyz/123/"
abc xyz
我對於bash來說是相當新的,所以我可能會錯過一些微不足道的東西,但不管我做什麼,我都無法讓它工作。使用\\s
而不是\s
,使用單引號('
而不是"
),將空白標記放在方括號內(如[\s]
或甚至[\\s]
),似乎沒有任何幫助..?
(編輯)如果它不同於一個sed/bash版本到另一個:我在這裏工作的OS X。
此外,我注意到,當我在[ \t]
空白部分後添加+
,有選擇地搶多個空格/製表符如果存在的話,它不工作要麼...?
echo "abc xyz" | sed "s/[ \t]+xyz/123/"
abc xyz
(又一遍,也試圖與\+
代替+
,和單引號代替雙引號,沒有什麼幫助)
有趣和相關:[?如何匹配在sed空格]( http://superuser.com/a/112837/204979)。基本上,對於POSIX合規性來說,使用字符類[[:space:]]而不是\ s,因爲後者是GNU sed extension_因此,您可能正在使用非GNU'sed'。你能提供'sed --version'的輸出嗎?這裏sed上的 – fedorqui
,它按預期工作;作爲@fedorqui建議,它確實是gnu sed –
您是否已經徹底閱讀了系統上的sed手冊頁?它應該記錄什麼工作,哪些不工作。在命令提示符下鍵入'man sed'。 –