首页 > 解决方案 > 如何使用 grep 匹配作为变量(而不是整行)

问题描述

这是示例文件

[user@linux]$ cat DeviceA
DeviceA#sh ver
Cisco IOS Software, 1841 Software (C1841-ADVSECURITYK9-M), Version 15.1(4)M10, RELEASE SOFTWARE (fc2)
[user@linux]$

Version 15.1(4)M10将被高度重视

[user@linux]$ egrep --color=auto 'Version (15.1\(4\)M7|15.1\(4\)M10|15.2\(1\)T4)' DeviceA
Cisco IOS Software, 1841 Software (C1841-ADVSECURITYK9-M), Version 15.1(4)M10, RELEASE SOFTWARE (fc2)
[user@linux]$

使用 grep 输出作为变量var

[user@linux]$ var=$(egrep --color=auto 'Version (15.1\(4\)M7|15.1\(4\)M10|15.2\(1\)T4)' DeviceA)
[user@linux]$

打印变量var

[user@linux]$ echo $var
Cisco IOS Software, 1841 Software (C1841-ADVSECURITYK9-M), Version 15.1(4)M10, RELEASE SOFTWARE (fc2)
[user@linux]$

var我可以Version 15.1(4)M10在执行时获取而不是获取整行echo $var吗?

期望的输出

[user@linux]$ echo $var
Version 15.1(4)M10
[user@linux]$

标签: linuxbashshell

解决方案


正如 Jww 所提到的,这可以很容易地使用-o标志来实现:

命令行:

fgrep -o "Version 15.1(4)M10" testtttt.txt, or, for introducing variable handling:
echo $(fgrep -o "Version 15.1(4)M10" testtttt.txt)

在脚本中,您可能会执行类似(未测试)的操作:

var=$(fgrep -o "Version 15.1(4)M10" testtttt.txt)
echo $var

推荐阅读