Как обратные ссылки соответствуют в sed?

Одно раздражение с принятым решением - то, что заголовки для различных столбцов будут включены в вывод. Причем другая проблема - это при использовании переключателя -x кому: ps это обеспечит полные командные строки для некоторых программ, которые могут работать и стать неприятностью в выводе.

Например,

  1. Раздражающие командные строки

    saml 18174 7.3 3.2 1174896 259756? Sl Aug27 132:38/opt/google/chrome/chrome - type=renderer - lang=en-US --force-fieldtrials=AsyncDns/AsyncDnsB/ForceCompositingMode/disable/InfiniteCache/No/OmniboxHQPReplaceHUPProhibitTrumpingInlineableResult/Standard/OmniboxSearchSuggestTrialStarted2013Q1/7/OneClickSignIn/Standard/Prerender/PrerenderControl/SendFeedbackLinkLocation/default/Test0PercentDefault/group_01/UMA-Dynamic-Binary-Uniformity-Trial/default/UMA-Session-Randomized-Uniformity-Trial-5-Percent/group_17/UMA-Uniformity-Trial-1-Percent/group_20/UMA-Uniformity-Trial-10-Percent/group_07/UMA-Uniformity-Trial-20-Percent/default/UMA-Uniformity-Trial-5-Percent/group_04/UMA-Uniformity-Trial-50-Percent/group_01/ - enable-crash-reporter=4061BD10D0DC127169CE2132BC3FF8EC, выпуск 14 Fedora (Лафлин) - дополнительный процесс - предварительный просмотр рендерера - отключают-webgl - disable-pepper-3d - disable-gl-multisampling - disable-accelerated-compositing - disable-accelerated-2d-canvas - disable-accelerated-video-decode - channel=18086.4.1423385819

    базируйтесь 1764 7.7 0.3 163692 28 928 tty1 Ss + Aug21 817:49/usr/bin/Xorg:0 - номер - подробный - автор/var/run/gdm/auth-for-gdm-fADI0V/database-nolisten tcp vt1

    Chrome особенно может быть довольно раздражающим при взгляде на ps вывод как это!

  2. Заголовки в выводе

    $ ps auf | sort -nk 3 | head -20
    ...
    root      1741  0.0  0.0   4140   400 tty5     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty5
    root      1743  0.0  0.0   4140   400 tty6     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty6
    saml     13780  0.0  0.0 115088  4216 pts/13   Ss   Aug27   0:00 bash
    saml     20432  0.0  0.0   6308   400 pts/9    S+   Aug27   0:00  \_ inotifywatch -e CREATE /etc
    saml      8206  0.0  0.0 115296  1108 pts/6    Ss+  Aug21   0:03 bash
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    saml     29352  0.1  0.5 661848 42960 pts/13   Sl+  17:59   0:18  \_ irb
    ...
    

    Вы видите заголовок, смешанный в в 7-й строке в выводе.

Альтернативы

  1. Избавление от заголовков

    ps обеспечивает переключатель для отключения дисплея этих заголовков столбцов. Это довольно просто в использовании, просто добавьте --no-heading переключатель.

    $ ps aux --no-heading | sort -nk 3 | head -10
    68        1481  0.0  0.0  38592  2144 ?        Ssl  Aug21   0:28 hald
    68        1527  0.0  0.0  18016   672 ?        S    Aug21   0:01 /usr/libexec/hald-addon-acpi
    avahi     1333  0.0  0.0  27872  1172 ?        S    Aug21   0:01 avahi-daemon: running [grinchy.local]
    avahi     1334  0.0  0.0  27752    20 ?        S    Aug21   0:00 avahi-daemon: chroot helper
    dbus      1307  0.0  0.0  22716  1900 ?        Ss   Aug21   1:03 dbus-daemon --system
    gdm       1879  0.0  0.0 317220  2740 ?        Sl   Aug21   0:00 /usr/libexec/polkit-gnome-authentication-agent-1
    ntp       3060  0.0  0.0  32600  2152 ?        Ss   20:05   0:00 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g
    root         1  0.0  0.0  19420  1004 ?        Ss   Aug21   0:01 /sbin/init
    root      1006  0.0  0.0      0     0 ?        S    Aug21   0:00 [kvm-irqfd-clean]
    root      1020  0.0  0.0      0     0 ?        S    Aug21   2:02 [kdmflush]
    

    Или как это:

    $ ps auf --no-heading | sort -nk 3 |head -10
    root      1735  0.0  0.0   4140   400 tty2     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty2
    root      1737  0.0  0.0   4140   400 tty3     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty3
    root      1739  0.0  0.0   4140   400 tty4     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty4
    root      1741  0.0  0.0   4140   400 tty5     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty5
    root      1743  0.0  0.0   4140   400 tty6     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty6
    saml     13780  0.0  0.0 115088  4216 pts/13   Ss   Aug27   0:00 bash
    saml     20432  0.0  0.0   6308   400 pts/9    S+   Aug27   0:00  \_ inotifywatch -e CREATE /etc
    saml      2098  0.0  0.0 115508  3148 pts/9    Ss   Aug22   0:05 bash
    saml     27134  0.0  0.0 115496  6768 pts/18   Ss   Aug27   0:02 bash
    saml      3248  0.0  0.0 115076  1024 pts/0    Ss+  Aug21   0:00 bash
    
  2. Возьмите под свой контроль отображаемые столбцы.

    Это может походить на боль, но если Вы пишете сценарий получения ps произведите его, не слишком плохо. Команда как это будет подражать выводу ps aux, кроме выгружают более длинную форму COMMAND столбец с более короткой версией, которая просто показывает имя исполняемого файла.

    $ ps ax --no-headings -o user,pid,%cpu,%mem,vsz,sgi_rss,tname,stat,start_time,time,ucmd
    

    При соединении всего этого без заголовков столбцов намного легче иметь дело с при сценариях.

    Список самых высоких к самому низкому % процессы ЦП:

    $ ps ax --no-headings -o user,pid,%cpu,%mem,vsz,sgi_rss,tname,stat,start_time,time,ucmd |sort -nrk 3|head -10
    saml     18086  114  6.4 1418852 515236 ?     Sl   Aug27 1-10:53:31 chrome
    saml     18536 14.7  4.1 1276240 328636 ?     Sl   Aug27 04:29:21 chrome
    saml     18558 12.2  3.4 1209712 278228 ?     Sl   Aug27 03:44:22 chrome
    saml     18543 10.9  3.8 1238132 308824 ?     Rl   Aug27 03:20:18 chrome
    root      1764  7.7  0.4 170220 35276 tty1    Rs+  Aug21 13:40:16 Xorg
    saml     18174  7.3  3.0 1167728 241728 ?     Sl   Aug27 02:14:25 chrome
    saml     18314  3.6  1.4 1049020 119308 ?     Sl   Aug27 01:06:19 chrome
    saml     18528  2.7  3.1 1178368 251212 ?     Sl   Aug27 00:50:55 chrome
    saml      2389  2.0  0.1 330632 8480 ?        Sl   Aug21 03:37:13 compiz
    saml     18208  1.7  1.3 1081132 108828 ?     Sl   Aug27 00:32:02 chrome
    

    Список самых низких к самому высокому % процессы ЦП:

    $ ps ax --no-headings -o user,pid,%cpu,%mem,vsz,sgi_rss,tname,stat,start_time,time,ucmd |sort -nk 3|tail -10
    saml     18208  1.7  1.3 1082156 108348 ?     Sl   Aug27 00:32:03 chrome
    saml      2389  2.0  0.1 330632 8492 ?        Sl   Aug21 03:37:15 compiz
    saml     18528  2.7  3.1 1181440 250856 ?     Sl   Aug27 00:50:58 chrome
    saml     18314  3.6  1.5 1050044 119828 ?     Sl   Aug27 01:06:25 chrome
    saml     18174  7.3  3.0 1167728 242068 ?     Sl   Aug27 02:14:32 chrome
    root      1764  7.7  0.3 163688 28716 tty1    Ss+  Aug21 13:40:26 Xorg
    saml     18543 10.9  3.8 1235060 305464 ?     Sl   Aug27 03:20:32 chrome
    saml     18558 12.2  3.5 1214832 283560 ?     Sl   Aug27 03:44:34 chrome
    saml     18536 14.7  3.9 1267024 314400 ?     Sl   Aug27 04:29:39 chrome
    saml     18086  114  6.4 1412992 514856 ?     Sl   Aug27 1-10:55:28 chrome
    
4
10.07.2014, 20:57
1 ответ

Для файла /etc/crontab указывается имя пользователя, например mylogin . С помощью команды sudo crontab -e вы фактически редактируете /var/spool/cron/crontabs/root и не должны указывать имя пользователя в таком файле, только в /etc/crontab .

Если необходимо выполнить команду в качестве пользователя mylogin , необходимо поместить строку в /etc/crontab (и отредактировать ее с правами root ) или просто поместить ее в crontab пользователя mylogin .

От man 5 crontab :

EXAMPLE SYSTEM CRON FILE
    The following lists the content of a regular system-wide crontab  file.
    Unlinke  a user's crontab, this file has the username field, as used by
    /etc/crontab.
-121--83243-

Вы можете выполнить это справедливо с помощью команды join .

$ join -j 1 <(sort file3) <(sort file1) > tmp ; \
    join -j 1 <(sort tmp) <(sort file2) | sed 's/ /\t/g' > file4
  • Сначала я использую join в file3 и file1 , так как file3 имеет ключи.
  • Теперь я записываю выходные данные вышеуказанной команды в tmp и снова выполняю объединение в tmp и file2 .
  • В соответствии с приведенной выше командой выходные данные будут иметь формат космоса разделителем ".
  • Поскольку ваше требование имеет формат с разделителями табуляции, я передал его команде sed , которая заменяет все места на табуляцию.
  • Наконец, я пишу его в file4 в соответствии с вашим требованием.
-121--121612-

образцы в команде подстановки: [:; ]\( [^:;] *\)\( [:;]. *\) [;: ]\1 . Обратите внимание на \1 в конце. Это означает, что любой текст, соответствующий первой группе, \( [^:;] *\) также должен иметь место в конце образца.

Ваш образец пространство изначально 0000:1111:2222:3333:4444:1111:2222:3333:0000 . Образец соответствует : 1111:2222:3333:4444:1111 , и 1111 соответствует первой группе, а также \1 в конце.

После первого раунда замен образца пространство было изменено на 0000:1111:2222:3333:4444:2222:3333:0000 . Теперь, если 1111 в пространстве образца используется для соответствия \( [^:;] *\) , не осталось 1111 для соответствия \1 . Таким образом, образец не соответствует и механизм regex пытается что-то другое. В этом случае работает следующий доступный матч для первой группы, 2222 .

3
27.01.2020, 20:58

Теги

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