Как к “grep” строка возвращенного результата

Если Вы еще не сделали этого, установите gpm.

Затем используйте мышь для легко избранной копии и вставки (использующий середину кнопки) текст, в котором Вы нуждаетесь в любого редактора (или cat -> tmpfile.txt).

Это доступно в большинстве дистрибутивов, и также как tarball и GitHub repo.

3
24.09.2016, 03:56
5 ответов
[1130005] Вы можете использовать [1130408] lookbehinds и lookaheads[1130409] после включения PCRE (через [1130410]-P[1130411]):

4
27.01.2020, 21:10
[1130092] Или вы можете использовать [1130440]sed[1130441] для извлечения подходящей подгруппы довольно похожим образом на ваш пример с Javascript:

3
27.01.2020, 21:10
[1130007] Зависит от того, что вы знаете о строке. В этом случае вы можете определить искомый результат как все символы, которые являются либо цифрой, либо точкой:

1
27.01.2020, 21:10

С помощью sed можно комбинировать условную адресацию и обратные ссылки следующим образом:

sed "/temp=\([0-9.]*\)'C/!d;s//=\n\1\n/;s/.*=\n//;P;D"

Это, конечно, немного больше, чем расширение ответа godlygeek, но записывается с учетом всего входного файла. Она печатает только последовательность цифр и .точек между двумя строками temp= и 'C - даже если на одной строке встречаются кратные числа, - но каждая последовательность digit|dot печатается на своей строке.

Также обратите внимание, что для максимальной переносимости вы должны заменить n в \n\1\n буквальными новыми строками, если это доставит вам хлопот - хотя большинство sed будет поддерживать это в том виде, в котором написано - например:

...//\
\1\
/...

В любом случае, это позволит вам обращаться со странными вещами так же портативно, как и я знаю, как это может быть сделано. Например:

sed "/temp=\([0-9.]*\)'C/!d;s//=\n\1\n/;s/.*=\n//;P;D" <<\DATA
temp=50.0'C
temp=this_is_not_what_you_want'C...temp=92.4'C

some nonsense temp=here
more_nonsensetemp=76.999'Ctemp=56'Ctemp=656'C 
DATA
###OUT###
50.0
92.4
76.999
56
656

Его механизм довольно прост - он удаляет строки, не содержащие вашей целевой строки. Для тех, кто это делает, он выбирает только ту часть, которую вы хотите сохранить, и окружает ее с каждой стороны символами новой строки - и помещает символ, который, как известно, не был в вашей цели до первого. Затем он удаляет как можно больше пространства для шаблонов, заканчиваясь при этом на произвольном разделителе =\n.

Последняя линия Pтянется только до первой новой линии в пространстве шаблонов - которую мы только что вставили непосредственно за нашей целью - и Dподнимает ту же самую линию перед началом нового цикла с тем, что осталось.

1
27.01.2020, 21:10

это может показаться полезным, если вы хотите просто извлечь числовую часть из 50.0'C, вы также можете использовать cut. это может показаться простым, чем использование регулярного выражения.

echo "temp=50.0'C" | cut -d= -f2 | cut -d\' -f1

0
27.01.2020, 21:10

Теги

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