bash - 正确使用grep的中缀运算符“|”

时间:2014-08-26 18:55:00

标签: bash shell

我很难发现哪种方法最好...... (debian最新,侏儒)

这有效;

$ ls -1 | grep "JPG|RAF|TIF"

我正在尝试用变量

替换“JPG | RAF | TIF”

e.g。

$ xFILTER="JPG RAF TIF"

我试图分配给xFILTER变量...

  
      
  1. xFILTER = “JPG \ | RAF \ | TIF”
  2.   
  3. xFILTER = “\” JPG | RAF | TIF \ “”
  4.   
  5. xFILTER = “JPG \ NRAF \ nTIF”
  6.   
  • $ ls -1 | grep -E“$ xFILTER”
  • $ ls -1 | grep -e $ xFILTER
  • $ ls -1 | grep -E“$(echo”xFILTER“| tr'''|')”

有人可以指导我采取更明智的做法吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

这应该有效:

xFILTER="JPG|RAF|TIF"

ls -1 | grep -E "$xFILTER"

但是,谨慎的是,当文件可以包含空格或换行时,解析ls输出并不总是好的。查看shopt -s extglob以启用扩展通配并按扩展模式搜索文件。

答案 1 :(得分:0)

您正在使用grep支持的不同正则表达式语法。

引用man page

  

在基本的正则表达式中,元字符?,+,{,|,(和)失去了它们的特殊含义;而是使用反斜杠版本\?,+,{,\ |,(和)。

我很惊讶你说你的第一个例子有效。 使用以下之一:

xFILTER="JPG\|RAF\|TIF" ; ls -1 | grep $xFILTER
xFILTER="JPG|RAF|TIF" ; ls -1 | grep -E $xFILTER