“недействительный оператор grep”

Echo enter file name
Read file
Echo enter pattren
Read pattren
If [ grep $pattern $file ]
Then
Echo pattern found
Else 
Echo not found
Fi

Когда я выполняю это, я получаю ошибку как invalid operator grep

1
задан 30 June 2017 в 23:54

2 ответа

По-видимому, Вы не хотите проверять, что существует такая строка как grep $pattern $file, но существует ли вывод от команды, таким образом, что-то как [[ $(grep foo bar) ]] работало бы. Или как @steeldriver указанный, можно просто проверить статус выхода grep:

echo "enter file name: "
read file
echo "enter pattern: "
read pattern
if grep -q "$pattern" "$file"; then 
   echo "yeah, got it"
   else echo "nope, sorry, got nothing"
fi

, Очевидно, зафиксируйте ограничения. Echo не команда.

3
ответ дан 7 December 2019 в 12:34

test команда (также известный как [) имеет определенные операторы, список которых можно найти в man test руководство. Таким образом, [ grep $pattern $file ] является неправильным, так как Вы даете [ 3 аргумента, что это не распознает.

то, Что Вы, вероятно, хотите сделать, - то, что Zanna показал - использование grep в если оператор для оценки статуса выхода только. С другой стороны, можно сохранить вывод grep к переменной и проверить, непуста ли та переменная что-то вдоль этих строк:

output=$(grep "$pattern" "$file" 2> /dev/null)    
if [ -n "$output" ];
then
    echo "Got something"
else
    echo "Nothing"
fi

более часто, Вы будете видеть что-то вроде этого сделанное на практике:

if [ "x$output" != "x" ]
then
    echo "Got something"
else
    echo "Nothing"
fi
0
ответ дан 7 December 2019 в 12:34

Другие вопросы по тегам:

Похожие вопросы: