gpt4 book ai didi

regex - 为什么 grep 无法在 bash 中匹配字符串 "-n"和 "-e"?

转载 作者:太空狗 更新时间:2023-10-29 11:28:25 26 4
gpt4 key购买 nike

长话短说,将我的问题缩小为一行:

在 {a..z} 中的一个;做 echo "-$a"| grep "\-$a";完成

这将打印所有字母 but -e-n

看起来 Linux 版本、bash 版本、grep 的标志(-P-E)等都无关紧要!
测试环境:

  1. GNU bash,版本 3.2.57(2)-release (x86_64-suse-linux-gnu) SUSE Linux Enterprise Server 11 SP4 上
  2. GNU bash,版本 4.4.12(3)-release (x86_64-unknown-cygwin) on Cygwin(base-cygwin 3.8-1;cygwin32 2.10.0-1)
  3. rextester(bash 在线编译器;GNU bash 4.3.46)

为什么不打印-e-n
(删除代码中的破折号也解决了问题)

最佳答案

问题是 -e-n 是有效的 echo 选项,而 echo 没有打印它们。

此外,您应该在 grep 中使用 -- 来分隔选项和模式。建议您在 grep 中也使用 -F 选项进行固定字符串搜索。

您可以使用:

for a in {a..z}; do grep -F -- "-$a" <<< "-$a"; done

-a
-b
-c
-d
-e
-f
-g
-h
-i
-j
-k
-l
-m
-n
-o
-p
-q
-r
-s
-t
-u
-v
-w
-x
-y
-z

请注意,您也可以使用 printf 代替 echo:

for a in {a..z}; do printf -- '-%s\n' "$a" | grep -F -- "-$a"; done

关于regex - 为什么 grep 无法在 bash 中匹配字符串 "-n"和 "-e"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55047087/

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