使用grep / awk / sed查找确切的shell变量

问题描述 投票:0回答:1

我正在尝试查找包含反斜杠和空格的某个字符串的exact匹配项,但是我似乎无法获得仅返回一个匹配项的正确技术(请参见示例)。问题出现在相同变量的“版本”更多的地方,如下所示。

两个变量的例子是:variable_i_want =“数据库\基础\站点位置”variable_dont_want =“数据库\基础\站点位置-远程”

到目前为止我尝试过的事情:

awk -v pattern="$variable_i_want" '$1~pattern {print $1,$2,$3}' file.txt退货awk: warning: escape sequence '\B' treated as plain 'B'

grep -F "$variable_i_want" file.txt返回包含两个匹配项的行(站点的位置站点的位置-远程)。省略-F不会返回任何内容,因为它会将反斜杠和空格解释为代码而不是字符串(我想)。

[我认为可能的解决方案是将变量与正则表达式结合使用,例如^$variable_i_want$,但我无法在sed / awk或grep中使用它。

因此,为了清楚起见:我希望包含$ variable_i_want的行匹配。

bash awk sed grep
1个回答
0
投票

由于您尚未向我们提供Input_file的样本和预期输出文件的样本。如果您的样品不同,请在您的问题中张贴。所以我假设我有以下Input_file:

cat Input_file
test test test bla bla
Database\Base\location of site34232t3g34g34g
Database\Base\location of site - remote fh24g487g4hg4u3i

Shell变量值是:

variable_i_want="Database\Base\location of site"
variable_dont_want="Database\Base\location of site - remote"

现在运行以下代码:

awk -v var="$variable_i_want" -v var1="$variable_dont_want"  '
index($0,var) && !index($0,var1)
' file  Input_file

输出将如下。

Database\Base\location of site34232t3g34g34g
© www.soinside.com 2019 - 2024. All rights reserved.