Как я могу связать отдельный столбец вывода в список?

Блок ACPI зависит от включаемого PCI.

Symbol: ACPI [=y]
...
  Depends on: !IA64_HP_SIM && (IA64 || X86 [=y]) && PCI [=y]

Если Вы отключили PCI (или не включил его), или выбрал другую архитектуру, Вы не будете видеть опций, связанных с ACPI.

3
12.09.2013, 01:53
5 ответов

Использовать xargs:

$ command ls /proc | grep -v "^[0-9].*" | xargs

command часть необходима потому что если Ваш ls искажается к ls --color например, это добавляет непечатаемые escape-последовательности к своему выводу это grep так или иначе перерывает и приводит к нежелательным результатам.


Другие опции

Если Вы не возражаете против Вашего PWD изменение:

$ cd /proc && echo [^0-9]*

Если Вы не хотите изменять Ваш PWD:

$ pushd . &>/dev/null && cd /proc && echo [^0-9]* && popd &>/dev/null

Или:

$ echo /proc/[^0-9]* | sed 's!/proc/!!g'
5
27.01.2020, 21:09
  • 1
    @MichaelDurrant см. отредактированный ответ для важного момента об использовании ls. –  Joseph R. 11.09.2013, 16:00
  • 2
    @terdon, Если Ваш ls искажается к ls --color попробовать ls /proc|grep --color ';' –  Joseph R. 11.09.2013, 16:09
  • 3
    @terdon В моей системе (Хрипящий Debian), я получаю вещи как: [01;34mtty!! –  Joseph R. 11.09.2013, 16:12
  • 4
    Сделайте Вам нужно echo после xargs? В моей системе, xargs отдельно производит тот же вывод. –  iruvar 11.09.2013, 19:13

Один длинный список

Используя grep

Вы могли просто использовать расширение оболочки на /proc и передайте его по каналу к grep:

$ echo /proc/* | grep -oP "(?<=/proc/)\D.*? " | paste -s -d ''

Пример

$ echo /proc/* | grep -oP "(?<=/proc/)\D.*? " | paste -s -d ''
acpi asound buddyinfo bus cgroups ....

Вышеупомянутое использует grepспособность использовать механизм регулярного выражения Perl (PCRE). Это -P переключатель к grep. -o говорит grep только возвратить строки, которые соответствуют шаблону. Мы затем используем способность Perl к lookbehinds. Таким образом, когда мы находим строку этим существа с /proc, мы затем заботимся /proc для любых строк, которые не запускаются с цифры (\D). Это строки, которые являются возвратом (нецифра стартовые).

Вставка делает некоторую очистку для нас путем удаления всех символов новой строки что grep добавленный, когда это запуск, отображающий его результаты.

Используя sed

Альтернатива этому методу должна была бы использовать sed вместо этого (эй, который рифмует).

$ echo /proc/* | sed 's@/proc/[0-9]\+ @@g;s@/proc/@@g'

Этот подход находит все строки, запускающиеся с /proc/ И цифры и пространство и заменяют ими ни с чем, эффективно удаляя их. После этого мы делаем другого sed команда, которая делает то же к /proc/ строки, и нас оставляют только с начальными строками нецифры.

Несколько столбцов

Для "сопоставления" вывода в столбцы, paste команда делает это довольно легко. Здесь я делаю 2 столбца, но можно измениться paste команда для генерации более или менее путем добавления дополнительных тире (-). column -t в конце вынуждает вывод выстроиться в линию на столбцах.

$ ls /proc | grep -v "^[0-9].*" | paste - - | column -t

Пример

Сначала 5 строк вывода благодаря head -5.

$ ls /proc | grep -v "^[0-9].*" | paste - - |column -t | head -5
acpi           asound
buddyinfo      bus
cgroups        cmdline
cpuinfo        crypto
devices        diskstats

Вот то же самое с 4 столбцами:

$ ls /proc | grep -v "^[0-9].*" | paste - - - - |column -t | head -5
acpi           asound         buddyinfo     bus
cgroups        cmdline        cpuinfo       crypto
devices        diskstats      dma           dri
driver         execdomains    fb            filesystems
fs             interrupts     iomem         ioports

Примечание: На ответ @JosephR., если Вы встречаетесь с какими-либо проблемами с вышеупомянутыми командами, которые анализируют вывод от ls, можно снабдить префиксом его команду Bash, command, который обойдет любые псевдонимы, можно иметь в распоряжении для ls.

Пример

$ command ls /proc | grep -v "^[0-9].*" | paste - - - - |column -t | head -5
acpi           asound         buddyinfo     bus
cgroups        cmdline        cpuinfo       crypto
devices        diskstats      dma           dri
driver         execdomains    fb            filesystems
fs             interrupts     iomem         ioports
3
27.01.2020, 21:09
  • 1
    Последняя команда не работает на меня. Это перечисляет каталоги, которые действительно запускаются с чисел. –  Joseph R. 11.09.2013, 15:53
  • 2
    @JosephR. - можно ли проверить дважды? Это хорошо работает для меня. –  slm♦ 11.09.2013, 15:55
  • 3
    я получил проблему. Мой ls искажается к ls --color который добавляет непечатаемые escape-последовательности к colorize вывод, это так или иначе закончилось на grepрадар. command ls ... обработанный. Еще одна причина не проанализировать ls. –  Joseph R. 11.09.2013, 15:57
  • 4
    @JosephR. - это - Ваш девиз к настоящему времени, с которым я соглашаюсь. Но мы все сделали это в повышении 8-). –  slm♦ 11.09.2013, 15:58
  • 5
    Ваша первая команда не работает (+1 на другие хотя). OP хочет те файлы в/proc', которые не запускаются с цифры, но если Вы используете echo все запускается с /proc таким образом, ничто не будет соответствовать ^[0-9]. Взгляните на вывод, который Вы отправили, все запускается с числа. И, в любом случае при использовании эха непосредственно все будет на той же строке так grep будет или соответствовать всему или ничему. Наличие плохого дня? :) –  terdon♦ 11.09.2013, 16:01

Как насчет

ls /proc | grep -v "^[0-9].*" | perl -pe 's/\n/,/'
1
27.01.2020, 21:09

Как насчет того, чтобы использовать в своих интересах удар IFS- основанное разделение слова в сочетании с заменой команды (принимающий значение по умолчанию IFS)

echo $(ls /proc | grep -v "^[0-9].*")
acpi buddyinfo bus cmdline cpuinfo.....
1
27.01.2020, 21:09

ls только отображает его вывод в столбцах, когда он печатает к терминалу. Когда его вывод является файлом или каналом, ls печать один объект на строку.

Можно использовать опцию -C для печати в столбцах независимо от типа потока вывода но это лишит возможности (или по крайней мере, трудно) фильтровать вывод с grep.

Можно сказать ls проигнорировать файлы, имя которых начинается с цифры. Это - самый простой способ быть произведенным, который похож на вывод от ls /proc только без рабочих каталогов.

ls -I '[0-9]*'

С другой стороны, можно указать, какие записи Вы хотите перечислить.

(cd /proc && ls -d [!0-9]*)

Если Вы просто хотите записи и не заботитесь о презентации или цветах, используйте подстановочные знаки оболочки вместо ls. Вторая команда характерна для zsh.

(cd /proc && echo [!0-9]*)
echo /proc/[^0-9]*(:t)
1
27.01.2020, 21:09

Теги

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