Использованиеawk
:
list="1,21,3,4"
source=2
awk -F, -v search="$source" '{ for (i=1;i<=NF;i++) { if ($i==search) {print $i} } }' <<<"$list"
Вы ищете 2
во всей строке, а 21
на самом деле содержит 2
.
Если вся ваша строка всегда разделена запятой, вы также можете сделать:
grep -E ',2,|,2$|^2,'
Это найдет 2
в начале, середине или конце списка.
Не каждый файл в каталоге /proc/ содержит текст.
/proc/bus/pci/05/00.0
(и подобные файлы )содержат двоичные данные, а не текст. Они не предназначены для отображения на терминале, они предназначены для чтения программой, которая понимает двоичный формат данных (, который будет задокументирован где-то в документации ядра. или исходный код, по крайней мере ).
Если вы хотите посмотреть, что в нем, вы можете использовать hexdump
акаhd
:
$ hd /proc/bus/pci/05/00.0
00000000 00 10 72 00 07 04 10 00 03 00 07 01 10 00 00 00 |..r.............|
00000010 01 c0 00 00 04 00 6c d2 00 00 00 00 04 00 28 d2 |......l.......(.|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 10 40 30 |..............@0|
00000030 00 00 40 fe 50 00 00 00 00 00 00 00 0a 01 00 00 |..@.P...........|
00000040
Ваш вывод, вероятно, будет другим, потому что у вас почти наверняка есть другое устройство PCI -e на 05 :00.0
Если вы ищете, например,. Идентификаторы поставщиков/устройств PCI,вместо этого вы можете использовать дерево каталогов /sys/bus/pci/...
:
for i in /sys/bus/pci/devices/*
do
printf "Device ${i##*/}: vendor %s, device %s\n" "$(< $i/vendor)" "$(< $i/device)"
done
Я думаю, что иерархия каталогов /sys
была создана, поскольку /proc
становилась загроможденной разной (не -процессной -связанной )системной информацией в случайном жестком анализе -по -форматов, и разработчикам ядра это не понравилось, поэтому /sys
предъявляет более строгие требования к тому, чтобы виртуальные файлы легко анализировались.
Таким образом, вы можете сначала проверить, доступна ли информация, которую вы пытаетесь найти, в /sys
, прежде чем переходить к /proc
.