Как передать различные значения, включая разделенную пробелами строку, хранящуюся в переменной, в команду grep - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть строка, хранящаяся в переменной типа

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 ", подобной этой

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 голосов
/ 18 декабря 2018

Просто заключите вашу переменную в двойные кавычки

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, которое дополнительно передается в эту команду, игнорируется.

...