Если Вы еще не сделали этого, установите gpm.
Затем используйте мышь для легко избранной копии и вставки (использующий середину кнопки) текст, в котором Вы нуждаетесь в любого редактора (или cat -> tmpfile.txt
).
Это доступно в большинстве дистрибутивов, и также как tarball и GitHub repo.
С помощью 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
поднимает ту же самую линию перед началом нового цикла с тем, что осталось.
это может показаться полезным, если вы хотите просто извлечь числовую часть из 50.0'C
, вы также можете использовать cut
. это может показаться простым, чем использование регулярного выражения.
echo "temp=50.0'C" | cut -d= -f2 | cut -d\' -f1