Посмотрите на команду coreutils comm - man comm
NAME
comm - compare two sorted files line by line
SYNOPSIS
comm [OPTION]... FILE1 FILE2
DESCRIPTION
Compare sorted files FILE1 and FILE2 line by line.
With no options, produce three-column output. Column one contains
lines unique to FILE1, column two contains lines unique to FILE2, and
column three contains lines common to both files.
-1 suppress column 1 (lines unique to FILE1)
-2 suppress column 2 (lines unique to FILE2)
-3 suppress column 3 (lines that appear in both files)
Так, например, вы можете сделать
$ comm -13 <(sort a.txt) <(sort b.txt)
diary.txt
NOVEMBER.txt
(строки, уникальные для b.txt )
ps | sed 's/ *[^ ]* *\([^ ]*\).*/\1/'
Я использую ␣ для символа пробела.
s/A/B/ - s ubstitute A на B один раз на строку ␣* - 0 или больше пробелов [^␣]* - 0 или более символов, которые не являются (^) пробелом \(…\) - группа, все внутри экранированных скобок сохраняется как \1, так как это первая группа здесь .* - 0 или более случаев любого символа, кроме новой строки \1 - вызывает сохраненную группуps -o tt
ps | awk '{print $2}'
ps | sed '2,$s/\([^0-9 ][^ ]*\)/terminal/'
ps | sed '2,$s/\([0-9 ]*\)[^ ]*/\1terminal/'
ps | awk '{$2="terminal";print}' # change every line
ps | awk '{if(NR>1){$2="terminal"};print}' # omit first line
ps | sed 's/ *[^ ]* *\([^ ]*\).*/\1/'
Я использую ␣ для символа пробела.
s/A/B/ - s ubstitute A на B один раз на строку ␣* - 0 или больше пробелов [^␣]* - 0 или более символов, которые не являются (^) пробелом \(…\) - группа, все внутри экранированных скобок сохраняется как \1, так как это первая группа здесь .* - 0 или более случаев любого символа, кроме новой строки \1 - вызывает сохраненную группуps -o tt
ps | awk '{print $2}'
ps | sed '2,$s/\([^0-9 ][^ ]*\)/terminal/'
ps | sed '2,$s/\([0-9 ]*\)[^ ]*/\1terminal/'
ps | awk '{$2="terminal";print}' # change every line
ps | awk '{if(NR>1){$2="terminal"};print}' # omit first line
ps | sed 's/ *[^ ]* *\([^ ]*\).*/\1/'
Я использую ␣ для символа пробела.
s/A/B/ - s ubstitute A на B один раз на строку ␣* - 0 или больше пробелов [^␣]* - 0 или более символов, которые не являются (^) пробелом \(…\) - группа, все внутри экранированных скобок сохраняется как \1, так как это первая группа здесь .* - 0 или более случаев любого символа, кроме новой строки \1 - вызывает сохраненную группуps -o tt
ps | awk '{print $2}'
ps | sed '2,$s/\([^0-9 ][^ ]*\)/terminal/'
ps | sed '2,$s/\([0-9 ]*\)[^ ]*/\1terminal/'
ps | awk '{$2="terminal";print}' # change every line
ps | awk '{if(NR>1){$2="terminal"};print}' # omit first line
ps имеет множество опций - вам не нужно анализировать его, чтобы получить желаемый результат (то же самое относится ко многим командам, но это особенно бесполезно с ps, потому что вывод, который вы получите, будет включать программа анализирует выход ...)
Если вы действительно этого хотите, вы можете разобрать его, чтобы напечатать столбец TTY с помощью sed следующим образом:
$ ps | sed -r 's/^ +[^ ]+ +([^ ]+) .*/\1/'
TTY
pts/4
pts/4
pts/4
Вы, вероятно, можете заменить текст pts следующим образом:
$ ps | sed 's:pts/\?[0-9]*:terminal:'
PID TTY TIME CMD
3379 terminal 00:00:00 bash
3466 terminal 00:00:00 ps
3467 terminal 00:00:00 sed
ps имеет множество опций - вам не нужно анализировать его, чтобы получить желаемый результат (то же самое относится ко многим командам, но это особенно бесполезно с ps, потому что вывод, который вы получите, будет включать программа анализирует выход ...)
Если вы действительно этого хотите, вы можете разобрать его, чтобы напечатать столбец TTY с помощью sed следующим образом:
$ ps | sed -r 's/^ +[^ ]+ +([^ ]+) .*/\1/'
TTY
pts/4
pts/4
pts/4
Вы, вероятно, можете заменить текст pts следующим образом:
$ ps | sed 's:pts/\?[0-9]*:terminal:'
PID TTY TIME CMD
3379 terminal 00:00:00 bash
3466 terminal 00:00:00 ps
3467 terminal 00:00:00 sed