【问题标题】:how to grep 2 words in mid of the string如何在字符串中间grep 2个单词
【发布时间】:2021-09-06 17:56:07
【问题描述】:
string1=ram is going to school

string2=ram is playing the match

我知道我们可以像下面这样 grep -

isTrue=`echo $string1 |grep 'going'| grep 'school' | wc -l`
isTrue=`echo $string1 |grep 'playing'| grep 'match' | wc -l`

但我只想使用 1 个 grep,我尝试了很多方法但没有得到例外的 o/p -

isTrue=`echo $string1 |grep '*going*school' | wc -l`
isTrue=`echo $string1 |grep -e '*going*school' | wc -l`
isTrue=`echo $string1 |grep '\*going\*school' | wc -l`
isTrue=`echo $string1 |grep -G '*going\*school' | wc -l`
isTrue=`echo $string1 |egrep '*going*school' | wc -l`

有没有办法使用 1 grep 来做到这一点?

【问题讨论】:

  • 使用grep -q 'going .* school'
  • 您的前 2 个示例将始终返回 0
  • 还是不行

标签: regex grep


【解决方案1】:

我能够得到预期的答案 -

isTrue=`echo $string1 |grep '.*going.*school' | wc -l`

【讨论】:

  • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
  • 这在几个方面是错误的。了解如何使用引号,请参阅mywiki.wooledge.org/Quotes。了解如何使用命令替换,请参阅mywiki.wooledge.org/BashFAQ/082。将此脚本和您编写的任何其他 shell 脚本复制/粘贴到 shellcheck.net 中,直到您掌握了基础知识。想想.* 在你的正则表达式的开头匹配什么(提示 - 任何或没有)以及如果你删除它会改变匹配的字符串(提示 - 没有)。另请查看 grep 手册页中的 -c,因为您不需要将输出通过管道传输到 wc -l
  • 另外,isTrue 听起来像一个布尔值,因此将其设置为匹配行数显然不是正确的,而不是使用 grep -q 'going .* school' 作为@anubhava 在the very first comment under your question 中建议的那样,然后设置 isTrue 基于这是退出状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 2012-03-03
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 2015-04-13
相关资源
最近更新 更多