sed(在bash中)与[\ t]一起使用但不与\ s一起使用?

时间:2015-05-04 11:19:12

标签: regex macos bash sed removing-whitespace

我想在bash命令行上搜索替换包含空格的内容,我认为sed是最简单的方法。

使用表示标签或空格的[ \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]甚至{{ 1}}),似乎没什么帮助..?

(编辑)以防它从一个sed / bash版本到另一个版本不同:我在这里正在研究OS X.

此外,我注意到当我在[\\s]空白部分之后添加+时,可选地抓取多个空格/制表符(如果存在),它不再起作用......?

[ \t]

(同样,还尝试使用echo "abc xyz" | sed "s/[ \t]+xyz/123/" abc xyz 代替\+,单引号而不是双引号,没有任何帮助)

1 个答案:

答案 0 :(得分:1)

echo 'abc xyz<>abcxyz' | sed 's/[[:space:]]xyz/123/g'
abc123<>abcxyz
echo 'abc xyz<>abcxyz' | sed "s/[[:space:]]xyz/123/g"
abc123<>abcxyz

不适用于非常老的sed版本,但在GNU sed上作为posix投诉(AIX,...)