sed(在 bash 中)适用于 [ \t] 但不适用于 \s?
sed (in bash) works with [ \t] but not with \s?
我想在 bash 命令行上搜索替换包含 whitespace 的内容,我认为 sed 是最简单的方法。
使用 [ \t]
表示制表符或 space,以匹配白色 space,按预期工作:
echo "abc xyz" | sed "s/[ \t]xyz/123/"
abc123
但是使用 \s
而不是 [ \t]
并没有,令我惊讶的是:
echo "abc xyz" | sed "s/\sxyz/123/"
abc xyz
我是 bash 的新手,所以我可能遗漏了一些微不足道的东西,但无论我做什么,我都无法让它发挥作用。使用 \s
而不是 \s
,使用单引号('
而不是 "
),将白色 space 标记放在方括号内(如 [\s]
甚至 [\s]
), 似乎没有任何帮助..?
(edit) 以防它从一个 sed / bash 版本到另一个不同:我在这里研究 OS X。
此外,我注意到当我在 [ \t]
白色 space 部分后添加 +
时,如果存在,可选择抓取多个 space/tab 字符,它不会'也不工作了...??
echo "abc xyz" | sed "s/[ \t]+xyz/123/"
abc xyz
(同样,也尝试过使用 \+
而不是 +
,并使用单引号而不是双引号,没有任何帮助)
如 SuperUser 中所见 How to match whitespace in sed?:
For POSIX compliance, use the character class [[:space:]] instead of
\s, since the latter is a GNU sed extension
所以你可能 运行 是非 GNU sed
版本,因此 \s
对你不起作用。
你有两个解决方案:
- 同时使用
</code> (space) 和 <code>\t
,就像您在做的那样。
- 使用
[[:space:]]
.
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,...)
我想在 bash 命令行上搜索替换包含 whitespace 的内容,我认为 sed 是最简单的方法。
使用 [ \t]
表示制表符或 space,以匹配白色 space,按预期工作:
echo "abc xyz" | sed "s/[ \t]xyz/123/"
abc123
但是使用 \s
而不是 [ \t]
并没有,令我惊讶的是:
echo "abc xyz" | sed "s/\sxyz/123/"
abc xyz
我是 bash 的新手,所以我可能遗漏了一些微不足道的东西,但无论我做什么,我都无法让它发挥作用。使用 \s
而不是 \s
,使用单引号('
而不是 "
),将白色 space 标记放在方括号内(如 [\s]
甚至 [\s]
), 似乎没有任何帮助..?
(edit) 以防它从一个 sed / bash 版本到另一个不同:我在这里研究 OS X。
此外,我注意到当我在 [ \t]
白色 space 部分后添加 +
时,如果存在,可选择抓取多个 space/tab 字符,它不会'也不工作了...??
echo "abc xyz" | sed "s/[ \t]+xyz/123/"
abc xyz
(同样,也尝试过使用 \+
而不是 +
,并使用单引号而不是双引号,没有任何帮助)
如 SuperUser 中所见 How to match whitespace in sed?:
For POSIX compliance, use the character class [[:space:]] instead of \s, since the latter is a GNU sed extension
所以你可能 运行 是非 GNU sed
版本,因此 \s
对你不起作用。
你有两个解决方案:
- 同时使用
</code> (space) 和 <code>\t
,就像您在做的那样。 - 使用
[[:space:]]
.
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,...)