Shell Grep需要匹配一个特定的单词

Shell Grep需要匹配一个特定的单词,shell,unix,grep,Shell,Unix,Grep,我想在bash脚本中使用grep从一个文件中获取一行,其中只有“version”一词,问题是在我希望脚本查看的文件的下面几行中还有另一行,其中有“dlversion”一词 我将grep管道化到一个cut命令中,输出将保存为一个变量 问题是它要么不保存任何内容到变量中,要么同时保存两行内容,我已经尝试了几种方法,虽然它们都不起作用 grep -Fx version /path/to/file.txt | cut -c9- 输出=无 grep '^version$' /path/to/file.t

我想在bash脚本中使用grep从一个文件中获取一行,其中只有“version”一词,问题是在我希望脚本查看的文件的下面几行中还有另一行,其中有“dlversion”一词

我将grep管道化到一个cut命令中,输出将保存为一个变量

问题是它要么不保存任何内容到变量中,要么同时保存两行内容,我已经尝试了几种方法,虽然它们都不起作用

grep -Fx version /path/to/file.txt | cut -c9-
输出=无

grep '^version$' /path/to/file.txt | cut -c9-
grep "version" /path/to/file.txt | cut -c9-
输出=无

grep '^version$' /path/to/file.txt | cut -c9-
grep "version" /path/to/file.txt | cut -c9-
输出=两行

也试过

grep -w "version " /path/to/file.txt | cut -c9-
输出=无

grep '^version$' /path/to/file.txt | cut -c9-
grep "version" /path/to/file.txt | cut -c9-

我还尝试自己使用-F,-x,这也导致变量没有值。

如果任何复杂的技巧失败,请使用蛮力:通过另一个
grep
过程过滤结果,以过滤掉包含不需要的单词的行(使用
-v
选项):


如果任何复杂的技巧失败,请使用蛮力:通过另一个
grep
过程来过滤掉含有不需要的单词的行(使用
-v
选项):


根据您的grep版本,您有一些选择

如果支持,最好的选择是使用单词边界
\b
单词的任意一侧:

grep '\bversion\b' /path/to/file.txt
或:

这与“版本”匹配,前面有行首或任何类型的空格或标点

在您的特定情况下,您可以使用以下内容:

grep -E '(^|[^l])version' /path/to/file.txt
这与前面有行开头的“version”或除“l”以外的任何内容相匹配

针对你的评论:

  • ^
    匹配行的开头
  • |
    表示“或”
  • [^l]
    是一个括号表达式,其中第一个字符的
    ^
    表示“not”(因此它匹配除“l”之外的所有字符)
  • 括号用于创建一个组,因此“或”仅适用于模式的这一部分

根据您的grep版本,您有一些选择

如果支持,最好的选择是使用单词边界
\b
单词的任意一侧:

grep '\bversion\b' /path/to/file.txt
或:

这与“版本”匹配,前面有行首或任何类型的空格或标点

在您的特定情况下,您可以使用以下内容:

grep -E '(^|[^l])version' /path/to/file.txt
这与前面有行开头的“version”或除“l”以外的任何内容相匹配

针对你的评论:

  • ^
    匹配行的开头
  • |
    表示“或”
  • [^l]
    是一个括号表达式,其中第一个字符的
    ^
    表示“not”(因此它匹配除“l”之外的所有字符)
  • 括号用于创建一个组,因此“或”仅适用于模式的这一部分

使用边界可能会对您有所帮助:“\bversion\b”。谢谢您,我将
cut
更改为从第一个字符开始,然后使用
-v
将第一个
grep
的输出通过管道传输到第二个
-v
过滤掉剩余的字母,效果很好。使用边界可能会对您有所帮助:“\bversion\b”。谢谢,我将
剪切
更改为从第一个字符开始,然后使用
-v
过滤掉剩余的字母,将第一个
grep
的输出通过管道传输到第二个。谢谢!我使用的grep版本不支持边界。不过,你建议的答案奏效了。既然我很好奇,想了解我以后可能会用到的东西,你能解释一下
^
[^l]
的确切功能吗?谢谢!我使用的grep版本不支持边界。不过,你建议的答案奏效了。既然我很好奇,想了解我以后可能会用到的东西,你能解释一下
^
[^l]
到底做了什么吗?