С bash
, zsh
и некоторыми реализациями ksh
:
comm -12 <(tr -s '[:space:]' '[\n*]' < a.txt | sort -u) \
<(tr -s '[:space:]' '[\n*]' < b.txt | sort -u)
Там, word - это последовательность символов без пробелов (имейте в виду, что в GNU tr
это не работает с многобайтовыми пробелами).
comm
находит общие строки между двумя отсортированными файлами. Без опций выводит 3 столбца: строки только в файле1, строки только в файле2 и строки, общие для обоих. Вы добавляете -1
, -2
, -.3
для удаления соответствующих столбцов из вывода. Таким образом, comm -12
оставляет только третий столбец (общие строки).
tr -s '[:space:]' '[\n*]'
transliterate any sequence of characters of class space
into newlines, to put every word on its own line.
sort -u
сортирует и удаляет дубликаты из вывода tr
.
Подстановка процесса <(...)
передает выходы команд tr|sort
в comm
.
С zsh
:
w1=($(<a.txt)) w2=($(<b.txt))
print -rl -- ${(u)${w1:*w2}}
Там word - это последовательность символов, отличных от пробела, табуляции, нуля и новой строки (со значением по умолчанию $IFS
).
$(
$(cat a.txt)
, где zsh
читает содержимое файла самостоятельно, не вызывая cat
, поскольку оно не заключено в кавычки, оно подвергается разделению слов (но не globbing, в отличие от других оболочек).
Итак, w1
и w2
- это массивы, содержащие все слова в a.txt
и b.txt
.
${w1:*w2}
- это оператор zsh, который дает пересечение двух массивов (элементы, общие для обоих). (u)
- это флаг расширения параметров, который сохраняет уникальные элементы (удаляет дубликаты).
print -rl
печатает каждый аргумент по одному в строке.
Я бы использовал вариант и вроде:
firejail --interface=eth0.vlan100 --ip=someipaddress someprogram
Support for ipvlan driver was introduced in Linux kernel 3.19.
Найдено здесь:man firejail | Пожарная тюрьма