Bash / Awk: как запустить команду, используя bash или awk - PullRequest
2 голосов
/ 09 июня 2011

Как я могу запустить команду в bash, прочитать вывод, который она возвращает, и проверить, есть ли там текст "xyz", чтобы определить, запустить ли я другую команду или нет?

Это легко?

Спасибо

Ответы [ 5 ]

7 голосов
/ 09 июня 2011
if COMMAND | grep -q xyz; then
    #do something
fi

РЕДАКТИРОВАТЬ: Сделано тихо.

1 голос
/ 09 июня 2011

Например:

command1 | grep "xyz" >/dev/null 2>&1 && command2
  • run command1
  • его выходной файл с grep
  • сбросить вывод из grep
  • и если grep был успешным (поэтому нашел строку)
  • выполнить команду2
0 голосов
/ 09 июня 2011

Ваша спецификация очень слабая, но вот идея попробовать

output="$(cmd args ....)"

case "${output}" in
   *targetText* ) otherCommand args ... ;;
   *target2Text* ) other2Command ... ;;
esac

Надеюсь, это поможет.

0 голосов
/ 09 июня 2011

Несмотря на то, что вы можете выполнить эту задачу множеством разных способов, это идеальное применение для awk.

prv cmd | awk '/xyx/ {print "cmd" } ' | bash 

это то, что вы хотите

например,

у меня есть текстовый файл с именем temp.txt, который содержит только 'xyz'

Если я выполню следующую команду, я вычеркну вывод «нашел его» * ​​1010 *

$ cat temp.txt | awk '/xyz/ {print "echo found it"}' | bash
> found it

, поэтому я передаю вывод моей предыдущей команды в awk, который ищет шаблон xyz (/ xyz/).awk напечатает команду, в этом случае echo нашел ее и направит в bash для их выполнения.простой однострочник делает то, что вы просили.обратите внимание, что вы можете настроить регулярное выражение, которое ищет awk.

0 голосов
/ 09 июня 2011

Вы можете передать вывод команды в grep или grep -e.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...