Как получить строки, которые включают только одну группу букв, используя Bash? - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь найти строки, которые включают только одну группу букв. Файл содержит только цифры и строчные буквы. Нет места или что-нибудь.

Хороший пример:

39568250269955376311912572precondition005426787530581443236416842014020466976603

Плохой пример:

1895853531360579the3170095290529923mathematici2779805995331496368099837070an1084

Ответы [ 6 ]

1 голос
/ 20 октября 2019

Обычным инструментом для таких задач является grep, e: g:

grep -E -x '[^[:alpha:]]*[[:alpha:]]+[^[:alpha:]]*' file
1 голос
/ 20 октября 2019

Regex с sed

sed -n '/^[0-9]*[a-z]\{1,\}[0-9]*$/p'

или с grep:

 grep -x -E '[0-9]*[a-z]+[0-9]*'

или с awk:

 awk '$0 ~ "^[0-9]*[a-z]+[0-9]*$"'

Любой означает, чтото же самое - фильтровать только строки, начинающиеся с нуля или более цифр, за которыми следуют одна или несколько строчных букв, за которыми следуют только ноль или более цифр.

1 голос
/ 20 октября 2019

Не могли бы вы попробовать следующее.

awk 'gsub(/[a-z]+/,"&")==1' Input_file

Объяснение: Добавление пояснения к приведенному выше коду, это только для объяснения целей для запуска кода, любезно используйте вышеупомянутый сам код.

awk '                    ##Starting awk program here.
gsub(/[a-z]+/,"&")==1    ##Using gsub function of awk to substitute all small letters occurrences with same values itself.
                         ##Then checking count of it,if it is equal to 1 then print current line.
                         ##awk works on method of condition and action, in above condition is mentioned but NO action so by default print of current line will happen.
' Input_file             ##mentioning Input_file name here, which is being passed to awk program.
0 голосов
/ 21 октября 2019

Это может работать для вас (GNU sed):

sed -nE '/^[[:alnum:]]+$/{s/[[:alpha:]]+/&/2;t;//p}' file

Сосредоточиться на строках, которые содержат только буквенно-цифровые символы. Затем, если строка содержит 2 или более групп буквенных символов, отклоните ее и отклоните строку, если она также не содержит буквенных символов.

NB Принимается строка без цифр и только буквенных символов. Если цифры должны присутствовать всегда, используйте:

sed -nE '/^[[:alnum:]]+$/{/[[:digit:]]/s/[[:alpha:]]+/&/2;t;//p}' file
0 голосов
/ 21 октября 2019

Этот короткий awk должен делать (используя символы в качестве разделителя полей)

awk -F'[a-z]+' '{print NF}' file
  • 0 ничего в строке
  • 1 только цифры, без буквы
  • 2 одна группа букв (что вы хотите)
  • любое число больше 2, более одной группы букв

Если вам нравитсянапечатать строку:

awk -F'[a-z]+' 'NF==2' file
0 голосов
/ 21 октября 2019

Транслитерируйте все цифры в перевод строки, затем подсчитайте строки с буквами:

echo 39568250269955376311912572precondition005426787530581443236416842014020466976603 | tr '[0-9]' '\n'| grep -c [:alpha:]
1

echo  1895853531360579the3170095290529923mathematici2779805995331496368099837070an1084 | tr '[0-9]' '\n'| grep -c [:alpha:]
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...