gpt4 book ai didi

regex - sed(在 bash 中)适用于 [\t] 但不适用于\s?

转载 作者:行者123 更新时间:2023-11-29 09:11:03 24 4
gpt4 key购买 nike

我想在 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] 甚至 [\\s]),似乎没有任何帮助..?

(编辑)以防它从一个 sed/bash 版本到另一个不同:我在这里使用 OS X。

此外,我注意到,当我在 [\t] 空白部分之后添加一个 + 时,如果存在,可以选择获取多个空格/制表符,但它不会也不再工作了...??

echo "abc xyz" | sed "s/[ \t]+xyz/123/"
abc xyz

(同样,还尝试使用 \+ 而不是 +,并尝试使用单引号而不是双引号,但没有任何帮助)

最佳答案

如 super 用户的 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 对您不起作用。

您有两个解决方案:

  • 同时使用 (空格)和 \t,就像您在做的那样。
  • 使用[[:space:]]

关于regex - sed(在 bash 中)适用于 [\t] 但不适用于\s?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30028823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com