Текст Greping после соответствия с наклонными чертами

Так, мне нужен к grep текст после строки как

Motherboard P/N           :   XXXXXXXXXX

Где XXXXXXXXX текст, который я хочу. Я не хочу Motherboard P/N :

Я, может казаться, не делаю awk, сократить, sed, или что-либо работает хорошо с P/N

Какие-либо идеи?

1
задан 20 February 2018 в 02:34

3 ответа

grep -oP 'Motherboard P/N           :   \K.*'

Объяснение:

  • -o Печать, только соответствующая части строки
  • -P Использование совместимый с Perl regex (PCRE) - это активирует более усовершенствованные regex опции
  • \K, не рассматривают предыдущее как часть соответствия.
  • .* нуль Соответствия или больше любого символа (кроме новой строки)
3
ответ дан 7 December 2019 в 12:30

Почему, не используя конвейерный механизм с grep и sed следующим образом:

grep "Motherboard P/N" souceFile | sed 's/^.*Motherboard\ P\/N\ \:\ //1'

где исходный файл является файлом, содержащим Ваш текст. Sed имеет следующее регулярное выражение:

  • ^.* средства: с начала строки, любого количества символов до

  • Motherboard строка еще с некоторыми символами, для которых нужен комментарий (ниже)

  • \ символ перед специальными символами "выходит" из них, таким образом, они не интерпретируются оболочкой или командой, но вместо этого используются в качестве простых символов: пространство, наклонная черта и двоеточие.

Или Вы могли передать вывод по каналу команды (как полезное sudo lshw)

sudo lshw | grep "Motherboard P/N" | sed 's/^.*Motherboard\ P\/N\ \:\ //1'

Однако наиболее вероятно, что Вы не найдете "Материнскую плату P/N": текст в выводе lshw и выводе этого примера может быть пустым...

Править:

Или, поскольку я вижу то, в чем Вы нуждаетесь из своих комментариев, Вы могли изменить regex немного, для размещения к "S/N" и "P/N" одновременно. Используйте точку . вместо символа, который варьируется между строками исходного текста. Например:

sed 's/^.*Motherboard\ P\/N\ \:\ //1'  # the initial version
sed 's/^.*Motherboard\ .\/N\ \:\ //1'  # dot instead of "P"

... то же для grep

0
ответ дан 7 December 2019 в 12:30

Просто используйте возврат с grep:

grep -argument '(?<=string_you_use_as_separator)what_you_are_looking_for' dir/file_to_be_grepd.txt

в этом случае регулярное выражение будет выглядеть так:

(?<=:)\w*

полная команда grep. используйте -o, чтобы игнорировать все, что вам не нужно, и -P для жемчужного регулярного выражения. И мне нравится передавать это в сортировку просто для верности

grep -oP '(?<=:)\w*' file.txt | sort
0
ответ дан 30 June 2020 в 21:59

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

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