从文本文件中提取BASH中指定单词之间的特定单词

问题描述 投票:1回答:2
VAR="10.101.10.5"

我具有以下格式的文本文件abc.txt:

Name : www.ayz.com  { Destination : 10.101.10.2  tcpmask        members {     10.101.10.5 :http { address 10.101.10.5 }  10.101.10.3 :http { address 10.101.10.3 } } 

Name : www.abc.com   { Destination : 10.101.10.5  tcpmask        members {     10.101.10.5 :http { address 10.101.10.5 }  10.101.10.3 :http { address 10.101.10.3 } } 

[要求是当我grep指定特定IP时,例如10.101.10.5。它应该只搜索在目标词之后和成员词之前具有IP 10.101.10.5的行。

所以基本上,我需要一个仅当我为10.101.10.5 grep时才列出第二行的命令,它不应该返回第一行,因为它在成员之后具有IP。

我尝试使用sed,但没有帮助:

sed -n '/destination : $VAR /,/<members>/p' /abc.txt
bash shell
2个回答
1
投票

我建议:

grep 'Destination .* 10\.101\.10\.5 .* members' abc.txt

更新:

grep "Destination .* ${VAR//./\\.} .* members" abc.txt

参见:Difference between single and double quotes in bash


0
投票

使用双重配额和变量名。您还可以使用一些正则表达式,例如grep“ Destination \ s *:\ s * $ VAR”可以更灵活地处理Destination之后的多余空间

$ VAR="10.101.10.5"
$ grep "Destination : $VAR" file.txt
Name : www.abc.com   { Destination : 10.101.10.5  tcpmask        members {     10.101.10.5 :http { address 10.101.10.5 }  10.101.10.3 :http { address 10.101.10.3 } }
© www.soinside.com 2019 - 2024. All rights reserved.