Подтвердить что ты не робот

Grep в выражении IF

Следующая часть script читает каждую строку в $next. Но когда я пытаюсь выполнить grep конкретный шаблон, т.е. "MO" в $next, ошибка отображается на стандартном выходе как:

grep: 40922|OPR: No such file or directory  
grep: MO: No such file or directory  
grep: 12345|OPR: No such file or directory  
grep: MO: No such file or directory   
grep: 12345|12345|202|local|LMNO: No such file or directory  

cat /home/scripts/$E1.out | while read next  
do  
i=`echo $next | awk -F"|" '{print($1)}'`
j=`echo $next | awk -F"|" '{print($2)}'`
k=`echo $next | awk -F"|" '{print($3)}'`
l=`echo $next | awk -F"|" '{print($4)}'`
m=`echo $next | awk -F"|" '{print($5)}'`
n=`echo $next | awk -F"|" '{print($6)}'`
o=`echo $next | awk -F"|" '{print($6)}'`  
if grep -q "MO" $next  
then echo "FOUND;" >> /home/scripts/sql.$E1.out  
else echo "NOT FOUND;" >> /home/scripts/sql.$E1.out  
fi  
done  

$E1.out файлы выглядят так:

40922|OPR MO 12345|OPR MO 12345|12345|202|local|LMNO  
4b9b3361

Ответ 1

Аргумент, который вы передаете grep, $next, рассматривается как список имен файлов для поиска. Если вы хотите выполнить поиск внутри этой строки для строки, скажем, MO, вам нужно либо поместить ее в файл, либо передать этот файл в качестве аргумента, либо передать его через стандартный ввод.

Вот пример, который вы можете попробовать в командной строке; конечно, замените переменную, которую вы используете для буквенного значения, которое я включил для иллюстрации:

if echo "40922|OPR MO 12345|OPR MO 12345|12345|202|local|LMNO" | grep -q "MO"
  then echo "FOUND"
  else echo "NOT FOUND"
fi

Ответ 2

if grep -q "MO" ${E1}.out then
  echo "found"
else
  echo "not found"
fi

Ответ 3

 if tmux ls | grep -q "ABC"; then echo "1";  else echo "2"; fi