我正在编写的脚本试图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
,因为它不明确-始终使用string
或regexp
,无论它是什么意思。在文件中搜索字符串是:
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
我希望它有用。