我正在尝试查找包含反斜杠和空格的某个字符串的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的行匹配。
由于您尚未向我们提供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