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

时间:2018-12-18 13:42:39

标签: bash shell awk scripting 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

但是,一旦我在这样的“ 错误”变量中加入字符串,例如“ 找到的表

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

上述grep命令不起作用,并显示错误消息

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

当将空格分隔的选项作为“或”选项传递给$ error时,我有点难以处理

1 个答案:

答案 0 :(得分:1)

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

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

因为外壳程序用其值$errors替换了2:|a-3|table found,然后再次将行拆分为单词,这将是(仅对于grep命令):

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

因此使用选项grep,模式-E和文件2:|a-3|table执行found。附加传递到该命令的filename.txt的内容将被忽略。