apt install
есть опция --print-uris
, которая делает именно это:
$ apt install --print-uris libreswan
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libcurl3-nss
The following NEW packages will be installed:
libcurl3-nss libreswan
0 upgraded, 2 newly installed, 0 to remove and 7 not upgraded.
Need to get 1,255 kB of archives.
After this operation, 4,584 kB of additional disk space will be used.
'http://ftp.fr.debian.org/debian/pool/main/c/curl/libcurl3-nss_7.64.0-4_amd64.deb' libcurl3-nss_7.64.0-4_amd64.deb 335908 MD5Sum:376a45e2415e9aea88f5c8825dba0697
'http://ftp.fr.debian.org/debian/pool/main/libr/libreswan/libreswan_3.27-6_amd64.deb' libreswan_3.27-6_amd64.deb 919276 MD5Sum:cc05b89c596bcf40ac16a9e9fd4185b9
В нем перечислены все пакеты, которые будут загружены, с их URI, именем целевого файла, размером файла и хэшем.
Обратите внимание, что файлы, которые уже присутствуют в вашем локальном кэше APT, не будут перечислены.
Вы можете использовать регулярное выражение для сканирования ввода и получить желаемый результат.
Мы указываем grep
искать заглавное слово, первый символ которого находится ниже по строке, но только в начале другого заглавного слова. Поскольку это подразумевает по крайней мере одно такое совпадение, но мы не хотим, чтобы таких совпадений не было, мы инвертируем -v
смысл совпадения, чтобы получить желаемый результат.
Отредактировано :на основе наблюдений @they, он изменен для поиска слов в верхнем регистре.
grep -v '\<\([A-Z]\)[A-Z]\{1,\}\>.*\<\1[A-Z]\{1,\}\>' file
Использование Raku (, ранее известного как Perl _6)
raku -ne '.put if.words.map(*.comb(/ ^<upper> /)).Bag.values.max == 1;'
Пример ввода:
FOUR MILLION, EIGHT HUNDRED AND FIFTY-SEVEN THOUSAND, FIVE HUNDRED AND THIRTEEN innovating
FORTY-NINE MILLION, ONE HUNDRED AND EIGHTY THOUSAND, TWO HUNDRED AND FORTY-EIGHT championed
FORTY-SEVEN MILLION, NINE HUNDRED AND FIFTY-TWO THOUSAND, EIGHT HUNDRED AND SIX swashbuckling
NINE HUNDRED AND SIXTY-ONE THOUSAND, SIX HUNDRED AND THIRTY-ONE sprinklers
FORTY-TWO MILLION, TWO HUNDRED AND SIXTY-SIX THOUSAND, THREE HUNDRED AND SEVENTY-TWO furloughs
SEVEN MILLION, FOUR HUNDRED AND SEVENTEEN THOUSAND, FOUR HUNDRED AND FORTY-TWO panicky
THREE HUNDRED AND SEVENTY-NINE THOUSAND, FIVE HUNDRED AND TWENTY-EIGHT anchovies
FIVE MILLION, EIGHT HUNDRED AND FIFTY-NINE THOUSAND, FOUR HUNDRED AND SIXTY-FOUR excesses
FIFTY THOUSAND, NINE HUNDRED AND EIGHTEEN
FOURTEEN THOUSAND, SEVEN HUNDRED AND NINETY-EIGH
Пример вывода:
FIFTY THOUSAND, NINE HUNDRED AND EIGHTEEN
FOURTEEN THOUSAND, SEVEN HUNDRED AND NINETY-EIGH
Эта проблема легко решается с помощью одного -лайнера в Raku — новом названии языка программирования, ранее известного как Perl6 (, переименованного в 2019 году ).
Вкратце, ввод считывается в Raku построчно с использованием флагов командной строки -ne
. Ввод разбивается на пробелы -, разделенные words
, каждое из этих слов проверяется (с использованиемmap
)и фильтруется (с использованиемcomb
)для слов, начинающихся с заглавной буквы (с использованием регулярного выражения ^<upper>
). Эти буквы затемBag
-оцениваются, при этом подсчитывается количество вхождений, и возвращаются только строки, в которых существует max == 1
вхождений (, т. е. нет повторяющихся букв ).
Кажется, есть некоторый комментарий к тому, что составляет «слово» для этой проблемы. Если вы хотите считать слова через дефис как отдельные слова, сначала разделите их по дефисам, добавив .split("-")
в начало цепочки методов (перед.words
).
Чтобы дать вам представление о том, как работает приведенный выше код Raku, вот основная часть кода с подпрограммой split
, но без условного выражения if
, и без max
условного:
raku -ne '.split("-").words.map(*.comb(/ ^<upper> /)).Bag.put;'
H(2) M A(2) T(2) E S F(3)
T(2) N E(2) H(2) O F(2) M A(2)
M S(2) T(2) N A(2) E H(2) F(2)
O(2) H(2) S(2) A(2) T(2) N
M H(2) A(2) S(3) F T(5)
S(2) F(3) A(2) H(2) T(2) M
T(3) H(2) S E F N A(2)
H(2) T S M N A(2) F(4) E
A E F H N T
E T F N H S A
https://docs.raku.org/language/regexes#Predefined_character_classes
https://raku.org