Так, мне нужен к grep текст после строки как
Motherboard P/N : XXXXXXXXXX
Где XXXXXXXXX
текст, который я хочу. Я не хочу Motherboard P/N :
Я, может казаться, не делаю awk, сократить, sed, или что-либо работает хорошо с P/N
Какие-либо идеи?
grep -oP 'Motherboard P/N : \K.*'
Объяснение:
-o
Печать, только соответствующая части строки -P
Использование совместимый с Perl regex (PCRE) - это активирует более усовершенствованные regex опции \K
, не рассматривают предыдущее как часть соответствия. .*
нуль Соответствия или больше любого символа (кроме новой строки) Почему, не используя конвейерный механизм с 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
Просто используйте возврат с 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