尝试对从文件中读取的变量中保存的不匹配模式进行grep



我正在编写的脚本试图grep出不匹配的模式,其中模式作为bash变量提供给grep函数。现在的变量只包含一个模式,即"tmp$",用于grep出以tmp结尾的记录。这是的代码

cat file | grep -v -F "${EXCLUSIONS}" 

其中EXCLUSIONS是变量

cat file:
/bin/xyz
/bin/abc
/tmp/dir/abc
/helloworld/tmp
echo $EXCLUSIONS:
tmp$
/bin
#Here I want the output to be only /tmp/dir/abc as one pattern
#to exclude is anything that ends with tmp or /bin

输出仍然包含以tmp结尾的条目,我认为这是因为它不将tmp$结尾的$

在文件中搜索文本的上下文中停止使用单词pattern,因为它不明确-始终使用stringregexp,无论它是什么意思。在文件中搜索字符串是:

grep -F 'string' file

并且搜索(BRE(正则表达式是:

grep 'regexp' file

由于您希望tmp$末尾的$被视为end-of-string正则表达式元字符,因此您必须希望在正则表达式上匹配,因此您可以使用:

grep -v "$EXCLUSIONS" file

顺便说一句,为了避免与环境中已经导出和存在的其他变量名发生冲突,除非导出了变量,否则不要使用所有大写的变量名。

我认为你不应该使用-F,这意味着"固定字符串",不支持Regex。EXCLUSIONS不应该以$结尾。您应该使用$来指定grep中的行尾。看看这个例子。

cat test.txt
row1
row2
row3
1tmp
2tmp
tmp1
tmp2

echo $EXCLUSIONS
tmp
cat test.txt | grep -v ${EXCLUSIONS}$
row1
row2
row3
tmp1
tmp2

我希望它有用。

最新更新