linux 如何使用Bash获取只包含一组字母的行?

kiz8lqtg  于 2023-05-16  发布在  Linux
关注(0)|答案(7)|浏览(159)

我在找只包含一组字母的行。该文件只包含数字和小写字母。没有空间或任何东西。
很好的例子:

39568250269955376311912572precondition005426787530581443236416842014020466976603

不好的例子:

1895853531360579the3170095290529923mathematici2779805995331496368099837070an1084
s1ag04yj

s1ag04yj1#

你能试着跟着我吗。

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.
bmp9r5qi

bmp9r5qi2#

正则表达式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]*$"'

两者都表示相同-仅过滤以零个或多个数字开头,后跟一个或多个小写字母,后跟零个或多个数字的行。

umuewwlo

umuewwlo3#

用于此类任务的常规工具是grep,例如:

grep -E -x '[^[:alpha:]]*[[:alpha:]]+[^[:alpha:]]*' file
63lcw9qa

63lcw9qa4#

您可以遍历整个文件并执行类似if [[ $line =~ ^[A-Za-z]+$ ]]的操作,然后打印出该行。
请注意,您必须首先遍历文件的每一行,然后才能执行命令。

yyhrrdl8

yyhrrdl85#

将所有数字转换为换行符,然后在以下位置计算包含字母的行数:

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

echo  1895853531360579the3170095290529923mathematici2779805995331496368099837070an1084 | tr '[0-9]' '\n'| grep -c [:alpha:]
3
gojuced7

gojuced76#

这个简短的awk应该可以(使用字符作为字段分隔符)

awk -F'[a-z]+' '{print NF}' file
  • 0在线无内容
  • 1只有数字,没有字母
  • 2一组字母(你想要的)
  • 任何大于2的数字,一组以上的字母

如果你想打印这行:

awk -F'[a-z]+' 'NF==2' file
a6b3iqyw

a6b3iqyw7#

这可能对你有用(GNU sed):

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

将焦点放在只包含字母数字字符的行上。然后,如果该行包含两组或更多组字母字符,则拒绝该行,如果该行也不包含字母字符,则拒绝该行。
注意:这将接受没有数字、只有字母字符的行。如果必须始终显示数字,请用途:

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

相关问题