gpt4 book ai didi

linux - Grep 带空格的单词

转载 作者:太空宇宙 更新时间:2023-11-04 05:08:06 35 4
gpt4 key购买 nike

我有一个包含引号、逗号和空格的文本文件。

"'x','a b c'"
"'x','a b c','1','2 3'"
"'x','a b c','22'"
"'x','a b z'"
"'x','s d 2'"

但是,当我尝试使用 grep 提取精确匹配时,它不显示结果。下面是我尝试使用的命令。

grep -E "\"\'x\'\,\'a\s\+b\s\+c\'\"" test.txt

预期输出:“'x','a b c'”

我错过了什么吗?任何帮助将不胜感激。

最佳答案

你很接近!几点注意事项:

  • 不要使用\s。它是一个 gnu 扩展,并非随处可用。最好使用字符类 [[:space:]],或者实际上只是 匹配空格。
  • \+ 可能会产生误导 - 在 -E 模式下,它匹配文字 +,而在没有 -E 的情况下,\+ 匹配一个或多个前面的字符。转义取决于您使用的模式。
  • 你不需要逃避一切!在 " 双引号中时,转义双引号 "\"",不要转义双引号中的单引号和逗号,"\'\," 被解释为 "',"

如果您只想使用 grep -E 匹配空格:

grep -E "\"'x','a +b +c'\""

这很简单,没有 -E,只需 \+ 而不是 +:

grep "\"'x','a \+b \+c'\""

我喜欢把东西放在大括号内的+前面,帮助我阅读:

grep "\"'x','a[ ]\+b[ ]\+c'\""
grep -E "\"'x','a[ ]+b[ ]+c'\""

如果要匹配 ab 之间的空格和制表符,可以使用 $'\t'[ ] 内插入文本制表符:

grep "\"'x','a[ "$'\t'"]\+b[ "$'\t'"]\+c'\""
grep -E "\"'x','a[ "$'\t'"]+b[ "$'\t'"]+c'\""

但是使用 grep -P 就会变成:

grep -P "\"'x','a[ \t]+b[ \t]+c'\""

但最好的是忘记 \s 并使用字符类 [[:space:]]:

grep "\"'x','a[[:space:]]\+b[[:space:]]\+c'\""
grep -E "\"'x','a[[:space:]]+b[[:space:]]+c'\""

关于linux - Grep 带空格的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58619925/

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