LINUX.ORG.RU

Подскажите варианты обработки текста sed, awk ?

 ,


0

1

Приветствую, попробовал погуглить все возможные примеры с sed и awk, ничего найти похожего не смог, решил спросить, реально ли такое сделать?

Имеем вывод

sudo find /proc/sys -type f -print -exec cat '{}' \;
/proc/sys/abi/vsyscall32
1
/proc/sys/debug/exception-trace
1
.
.
.
/proc/sys/dev/cdrom/info
CD-ROM information, Id: cdrom.c 3.20 2003/12/17

и.т.д

Задача вывести в следующем формате

abi.vsyscall32 = 1
debug.exception-trace = 1

dev.cdrom.info = CD-ROM information, Id: cdrom.c 3.20 2003/12/17

в примере вывод 1,2 и 9 строки.

Задача при фильтрации, удаляем у текущей строки /proc/sys/, далее все следующие «/» заменяем на точки «.» в конце строки приклеиваем знак = и дальше вывод самого файла.

Возможно ли такое сделать при помощи find /proc/sys -type f | либо sed либо awk ? либо при помощи другой конструкции?

Перемещено Zhbert из general


Ответ на: комментарий от lowbob

как перенести тему в job ?

Zegarmistrz Światła @Zhbert!

Топикстартеру рекомендую ознакомиться с правилами раздела Job, иначе тред улетит оттуда в /dev/null.

mord0d ★★★★★
()

| awk -F'/' 'a2=$NF, a1=$(NF-1); getline; print a1"."a2,"=",$0}'

futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)

Я бы не стал выводить сразу в find (потому что не все файлы будут доступны/не_пустыми), накостылил бы цикл в баше:

for i in `sudo find /proc/sys -type f -print`; do echo -n "$i = " | perl -pe "s%^/proc/sys/(.*)$%\1%" | perl -pe "s%/%.%" && cat $i 2>/dev/null; done

Хотя у камрада @futurama конечно эстетичнее получилось (если поправить очепятку c фигурной скобкой), вот только если в выводе файла ничего не будет, то последовательность съезжает и получится

  • файл = содержимое
  • файл = файл
  • содержимое = файл
  • etc
VirtSlave300
()
Ответ на: комментарий от VirtSlave300

там недоделано. надо sed’om, убрать /proc/sys/, тут же заменить / на . и затем awk (из первой редакции поста)

можно все сделать awk’om, но лень

futurama ★★★★★
()
Ответ на: комментарий от VirtSlave300
cat $i 2>/dev/null
echo `cat $i 2>/dev/null`

Пардон, сам накосячил с пустыми файлами

VirtSlave300
()
Ответ на: комментарий от mv

Спасибо, про sysctl -a знал , смысл было сделать через /proc

Всем спасибо за наводки, пошел тренироваться и изучать sed с awk,

VirtSlave300, работает как надо, но в конце слеши не меняются на точки.

lowbob
() автор топика

grep . -r /proc/sys | sed 's|/proc/sys/||;s|:| = |' | tr / .

pinus_nigra
()
Ответ на: комментарий от lowbob

в конце слеши не меняются

про глобал модификатор для перловой регулярки забыл

for i in `sudo find /proc/sys -type f -print`; do echo -n "$i = " | perl -pe "s%^/proc/sys/(.*)$%\1%" | perl -pe "s%/%.%g" && echo `cat $i 2>/dev/null`; done

VirtSlave300
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.