Будет
ls `echo $PATH | sed s@ @\\ @g | sed s@:@ @g` | grep [string]
выполнить то, что вам нужно, по обоим пунктам? sed s@ @\\ @g
следует заменить $PATH
записей, в которых есть пробелы, читаемым экранированным пробелом, а sed s@:@ @g
следует заменить двоеточия, разделяющие $PATH
записи, обычным пробелом, который позволяет ls
индивидуально отображать содержимое каждого каталога, который можно передать в grep
, который распознает поиск по регулярным выражениям, как подстановочные знаки, которые вы хотите использовать. Насколько я могу судить, это работает в родном Bash, но я не уверен, что это сработает в Cygwin's Bash.
Если это сработает, вы всегда можете присвоить ему псевдоним, чтобы он был менее громоздким в использовании.
Вы можете использовать словарь API, я подписался на бесплатный токен для API Dictionapi.com Merriam Webster.
Затем вы можете получить случайные слова из файла /usr/share/dict/words
(обратите внимание на macos, многие слова в этом файле на самом деле не настоящие слова, или, по крайней мере, не английские слова. ). Поскольку этот файл не содержит никакой полезной информации о слове, вам нужно найти его с помощью API, чтобы узнать, является ли это прилагательным или существительным.
#!/bin/bash
token=get-your-own-token
until [[ $fl == noun || $fl == adjective ]]; do
word=$(sort -R /usr/share/dict/words | tail -1)
fl=$(curl -s "https://www.dictionaryapi.com/api/v3/references/collegiate/json/${word}?key=$token" | jq -r.[].fl 2>/dev/null)
done
echo "Word is: $word"
Это очень медленно (получение случайных слов из огромного файла dict на Mac, а не из самого API ), потому что обычно ему приходится искать несколько слов, прежде чем он найдет то, которое является реальным словом и является существительным или имя прилагательное. Кроме того, в этом коде мы смотрим только на то, какой частью речи является первое определение каждого слова, поэтому возможно, что слово может быть использовано как прилагательное или существительное, но будет пропущено, потому что это не то, как первое определение слова. используется слово.
В конце концов он делает то, что вы ищете, хотя и не очень хорошо.
Вам, вероятно, лучше получить таксономически правильный список слов для начала, а не пытаться классифицировать список, который у вас есть, поскольку знающие люди уже проделали эту работу.
Вот некоторые из Wordnet , уже классифицированные как глаголы, прилагательные, существительные и т. д., хотя они, похоже, не включают причастия, союзы и т. д. и т. д.
Существительные n
, глаголы v
, наречия r
и прилагательные a
находятся в индексных файлах с идентифицирующей буквой во втором поле, и поэтому их можно извлечь с помощью небольшого awk
, проходя их через shuf
, чтобы рандомизировать их и перенаправить в файл.
awk '{ if ( $2 ~ "^[nvar]$") print $1" " $2 } ' index.* | shuf > mylist
Это дает вам файл из 155 339 слов.
После этого вы можете либо выбрать случайный номер строки, либо проще всего просто shuf
указать файл и каждый раз выбирать строку 1
shuf -n 1 mylist
Что даст вам слово и класс
shuf -n 10 mylist
coolness n
coefficient_of_elasticity n
naive_realism n
flying_mare n
nut_bar n
santiago_de_chile n
turkmen a
fore-and-aft_topsail n
robert_gray n
follow_suit v
В некоторых записях используется « _» вместо пробела, поэтому вам придется удалить его, если он оскорбляет.
Чтобы держать их отдельно....
awk '{ if ( $2 ~ "^[nvar]$" ) {print $1 > "my"$2}} ' index.*
И ваша функция случайного слова может быть просто
shuf -n 1 my$1
Когда вы передаете класс в качестве аргумента (n, v, a или r )например
randword n