我想搜索 - 在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'。 –