如何将不同的值(包括存储在变量中的空格分隔字符串)传递给grep命令



我有一个字符串存储在像这样的变量中

errors="ORA-01000:|ORA-03113:|ORA-01555|ORA-19815:|shutdown|ORA-27603"

当我把它传递给像这样的grep命令时,效果很好

more filename.txt |grep -E $errors | awk '{print $1 $2}' >> temp.txt

但一旦我在这个">错误"变量中包含一个字符串,例如">table found

errors="ORA-01000:|ORA-03113:|ORA-01555|ORA-19815:|shutdown|ORA-27603|table found"

上面提到的grep命令不起作用,并给出错误

grep: **found**: No such file or directory

当空格分隔选项作为"OR"选项传递给$error 时,我有点不知所措

只需将变量用双引号括起来

more filename.txt | grep -E "$errors"

如果你有,说

errors="2:|a-3|table found"

命令

more filename.txt | grep -E $errors

就像运行

more filename.txt | grep -E "2:|a-3|table" found

由于shell将$errors替换为其值2:|a-3|table found,然后再次将行拆分为单词,这将是(仅适用于grep命令(:

  1. grep
  2. -E
  3. 2:|a-3|table
  4. found

因此使用选项-E、模式2:|a-3|table和文件found执行grepfilename.txt的内容将被忽略,该内容通过管道附加到该命令中。

最新更新