вывод смешанного буквенно-цифрового ввода с помощью grep, pipe и cat

Использовать sshfs

sshfs username@server:/directory/in/server/ /local/directory/to/mount

Локальный каталог для монтирования должен быть пустым

Пример

sshfs corthez@mycloudserver.com:/home/corthez/codes/ /home/corthez/sshfs/codes
1
24.08.2019, 19:32
2 ответа

ИМХО это было бы проще в awk или perl, по изложенным здесь причинам:grep с логическими операторами (, в частности, что в grep )нет естественного ANDоператора. Например

awk 'gsub(/[a-z]/,"&") == 5 && gsub(/[0-9]/,"&") == 5' file

или

perl -ne 'print if tr/[a-z]// == 5 && tr/[0-9]// == 5' file

напечатает строки, содержащие ровно 5 символов каждого из наборов символов.


Если вы настаиваете на grep, может сработать что-то вроде этого:

grep -xE '([^a-z]*[a-z][^a-z]*){5}' file | grep -xE '([^0-9]*[0-9][^0-9]*){5}'
2
27.01.2020, 23:22

Не используя правые инструменты , см. , но хотя бы как альтернативу:

while read i; do 
  foo=$(echo -n $i | sed 's/[a-z]//g' | wc -c) && bar=$(echo -n $i | sed 's/[0-9]//g' | wc -c)
  [[ $foo -eq 5 && $bar -eq 5 ]] && echo "$i  has five digits and five alphas" 
done < file

Удалите буквы, оставшиеся цифры и сосчитайте их. Чтобы быть тщательным, удалите цифры, оставшиеся - альфа, посчитайте их. Сохраните каждый результат в переменной:

foo=$(echo -n $i | sed 's/[a-z]//g' | wc -c) && bar=$(echo -n $i | sed 's/[0-9]//g' | wc -c)

Если переменные имеют длину 5 символов, то строка состоит из пяти цифр и пяти букв:

[[ $foo -eq 5 && $bar -eq 5 ]] && echo "$i  has five digits and five alphas" 

Выход:

azert12345  has five digits and five alphas
a1z2e3r4t5  has five digits and five alphas

Эта логика ошибочна?

1
27.01.2020, 23:22

Теги

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