Обязательное awk
решение:
awk -v sect="4242" '$0~/^[[:digit:]]/ {if ($1==sect) {p=1;next} else p=0} p' input.txt
awk
переменная sect
с помощью оператора -v
. p
(для «печати» )на 1
, но пропускаем обработку до следующей строки (, поэтому мы не печатаем начало раздела ).. Если номер секции не совпадает, мы устанавливаем флаг 0
. p
равно 1
. Если вы хотите убрать начальные пробелы из вывода, измените программу следующим образом:
awk -v... '$0~/^[[:digit:]]/ {if ($1==sect) {p=1;next} else p=0}
p{sub(/^[[:space:]]+/,""); print}' input.txt
Я предлагаю это решение, предполагая, что в содержимом файла нет @
:
$ sed -e 's/^\([0-9]\)/@\1/' -n -e '/@4317/,/@/p' file | sed -e '/^@/d' -e 's/^[[:blank:]]*//'
0700 U.S. Robotics USR5426 802.11g Adapter
0701 U.S. Robotics USR5425 Wireless MAXg Adapter
0711 Belkin F5D7051 v3000 802.11g
0720 Dynex DX-BUSB
0721 Dynex DX-EBUSB
's/^\([0-9]\)/@\1/'
заменяет начальный номер строки на @
. '/@4317/,/@/p'
выбирает содержимое между двумя @
по номеру идентификатора. sed -e '/^@/d' -e 's/^[[:blank:]]*//'
удаляет строки, начинающиеся с @
, и начальные пробелы.