Почему мое grep + regex не работает?

Можно перенаправить через awk вместо того, чтобы полагаться на код возврата.

grep posix test_file.txt|awk 'BEGIN{matches=0}{matches++}END{if(matches>0){print "success";}else{print "fail";}}'

Вывести только первое совпадение:

grep testvalue test_file.txt|awk 'BEGIN{matches="";}{matches=$0;}END{if(matches!=""){print "success";print matches;}else{print "fail";}}'

И с функцией захвата значения, где отображается каждое совпадение grep:

grep testvalue test_file.txt|awk 'BEGIN{matches="";}{matches=matches $0 "\n";}END{if(matches!=""){print "success";print matches;}else{print "fail";}}'
1
18.01.2014, 01:27
2 ответа
watch cat /proc/mdstat | grep -oE 'finish=[[:digit:]]+\.[[:digit:]]' | grep -oE '[[:digit:]]+\.[[:digit:]]'

Если вам действительно нравится формат "\ d" в стиле Perl и ваш grep поддерживает регулярные выражения в стиле Perl, то:

cat mdstat | grep -oP 'finish=\d+\.\d' | grep -oP '\d+\.\d'

где параметр "-P" указывает perl- стиль регулярных выражений.

Параметр «-o» указывает grep отображать только ту часть строки, которая соответствует регулярному выражению. Это то, что удаляет ненужный текст и позволяет нам вернуть только оставшееся время.

4
29.04.2021, 00:43

Вы можете использовать:

watch cat mdstatout | grep -oP 'finish\=\d+\.\d+' | cut -d= -f2

205.7

-o указывает grep выводить только соответствующий текст, а не всю строку, а -P позволяет использовать регулярное выражение perl что включает \ d .

Кроме того, я использую cut , чтобы вытащить цифры, а не другое регулярное выражение.

0
29.04.2021, 00:43

Теги

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