Как использовать И и НЕ оба в единственной команде grep

Я создаю один из сценария оболочки, В котором, я должен отфильтровать процесс кроме собственного процесса grep. Если я использую:

echo "step1"
psout=`ps -aux | grep 'deluged'| grep '58846'`
echo "step2"
echo $psout       
...

затем остановитесь, средства сценария step2 не отображаются! и $psout, выходной пробел. Я не делаю почему.

Если я пробующий использование за И и кроме цвета:

$ ps -aux | grep -e 'deluged' -e '58846' -v "color"
grep: color: No such file or directory

Если я пытающийся использовать Связку ключей:

ps -aux | grep -e "[d]eluged"."58846"

Blank OUTPUT

Короче говоря, Как найти процесс с единственным grep с И и кроме собственного процесса grep?

2
задан 26 July 2016 в 16:28

3 ответа

Вы сказали в комментариях, что Вы хотите знать, существует ли процесс или нет. Используйте pgrep -f 'deluge' для этого. Или альтернативно pgrep -f 'deluge.*58846'

pgrep специально предназначен, чтобы просто дать Вам pid, если процесс будет существовать, и постарайтесь не анализировать проблемы с grep и PS, Если процесс не будет существовать, то у Вас будет пустой вывод

, можно также использовать sudo netstat -tulpan и использовать grep, чтобы видеть, ли номер порта среди открытых

6
ответ дан 2 December 2019 в 01:25

Можно использовать ps aux | grep processname | grep -v 'grep'

, первое grep выбирает все строки, содержащие processname, второе grep удаляет grep-строка от вывода

4
ответ дан 2 December 2019 в 01:25

Проблема состоит в том, что -v не кроме опции, это на самом деле означает, что соответствия инвертируются. Таким образом, Вы распечатаете все строки, которые не соответствуют 'затопленный' и '58846'.

сообщение об ошибке сгенерировано, поскольку -v не принимает аргументы, таким образом, эти grep команда пытается управлять на файле "цветом".

Для достижения желаемого результата необходимо использовать pgrep команда, переданная по каналу к grep вместо этого:

pgrep  -a 'deluged' | grep -e '58846'

Это произведет строку включая PID и полную команду для затопленного процесса с номером 58846 в команде.

, Если Вы хотите, чтобы переменная psout содержала 0, или какая-либо другая выбранная строка, если команда успешна затем:

psout=$((pgrep -a deluged | grep 58846) > /dev/null && echo "0")
echo $psout
0
4
ответ дан 2 December 2019 в 01:25

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

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