Разбор текстового файла для определенной строки с префиксом «Название продукта:» - PullRequest
2 голосов
/ 15 августа 2011

Привет, ребята, у меня есть текстовый файл, который создает сценарий (в частности, dmidecode > dmidecode.txt), и я хочу иметь возможность получить содержимое «Наименование продукта», поэтому в данном случае «Тонкий клиент HP t5740e», но это будет немного отличаться для других типов машин. Я мог бы просто использовать sed, чтобы сосчитать до строки 44, а затем нарезать его, пока не получу то, что хочу, но я бы хотел, чтобы оно было более динамичным.

Текстовый файл:

41  Handle 0x0001, DMI type 1, 27 bytes
42  System Information
43      Manufacturer: Hewlett-Packard
44      Product Name: HP t5740e Thin Client
45      Version:   
46      Serial Number: CNW1160BZ7
47      UUID: A0B86400-6BBD-11E0-8325-92EEE331A344
48      Wake-up Type: Power Switch
49      SKU Number: XL424AA#ABA
50      Family: 103C_53302C

Код, который у меня есть, кажется, не работает:

sed -c -i "s/\($TARGET_KEY *Product Name :*\).*/\1$REPLACEMENT_VALUE/" dmidecode.txt

Я чувствую, что мои регулярные выражения далеко (вероятно, потому что первоначальные примеры, на которые я смотрел, испортили мое "видение")

Любая помощь очень ценится! Кроме того, кто-нибудь знает какие-либо хорошие ссылки на регулярные выражения, которые я могу проверить?

UPDATE: Хорошо, я смог потратить немного больше времени на это, нашел несколько лучших примеров и получил это из своего исследования:

grep -e "Product Name: HP" -e "Product Name: hp" dmidecode.txt | awk '{print}'

Когда я добавляю '{print $NF}', он печатает только последнее слово, есть ли способ изменить печать, чтобы включить в нее все, что находится после строки поиска, а не всю строку?

Кроме того, я должен был отметить это с самого начала, но мне нужен вывод, чтобы перейти в переменную.

Ответы [ 3 ]

6 голосов
/ 15 августа 2011

вам даже не понадобится sed для этого

grep "Product Name" input.txt | cut -f2 -d ":"

Объяснение * * 1004

grep "Product Name" дайте мне только строки, содержащие "Название продукта"

cut -f2 -d ":" разделить эти строки, используя ":" в качестве разделителя и возвращаемое второе поле

3 голосов
/ 15 августа 2011

С помощью sed:

sed -n -e '/Product Name/{s/.*://p}'

Если вы хотите удалить пробелы после ::

sed -n -e '/Product Name/{s/.*: *//p}'
2 голосов
/ 15 августа 2011
awk -F ": " '$1 ~ /Product Name$/ {print $2}' dmidecode.txt
...