从名称以给定字母开头的文件中提取行

Rub*_*m74 7 sed text-processing regular-expression

在这里得到了一个列列表,如下:

59  LOUIS   1202    +1
60  FREDDIE 1201    +4
61  FINLAY  1200    -2
62  LEON    1137    +12
63  HARLEY  1132    +6
64  DAVID   1127    -1
65  MOHAMMAD1100    +6
66  REECE   1095    -1
67  KIAN    1090    0
68  KAI     1056    -6
69  KYLE    1030    -18
70  BRANDON 1011    -4
71  HAYDEN  1006    +5
72  ZACHARY 995     +10
73  KIERAN  973     -12
73  LUCA    973     -1
75  ASHTON  954     +4
76  BAILEY  939     -6
77  JAKE    913     +10
78  GABRIEL 910     +14
79  SAM     900     -2
80  EVAN    890     0
81  BRADLEY 847     -13
Run Code Online (Sandbox Code Playgroud)

如何仅提取带有例如字母“L”的行,如下所示:

73  LUCA    973     -1
Run Code Online (Sandbox Code Playgroud)

bu5*_*man 19

awk '$2 ~ /^L/' file
Run Code Online (Sandbox Code Playgroud)

告诉使用正则表达式awk测试第二个字段并打印匹配的行。$2~^L

正则表达式的第二字段匹配($2),当它开始^L


gle*_*man 7

基于@bu5hman 的回答:使用 awk,您可以轻松地将字母作为参数传递:

awk -v letter="L" 'substr($2, 1, 1) == letter' file
# or with a constructed regex
awk -v letter="L" '$2 ~ "^" letter' file
Run Code Online (Sandbox Code Playgroud)

  • +1。`$2 ~ ...` 版本还允许像 `-v letter='[FL]'` 这样的正则表达式搜索来匹配名称以 F 或 L 开头的行。 (3认同)

小智 5

这似乎是重复的,但无论如何,如果理解了,可以这样做:

首先,将列表保存在某个nameslist.txt文件中,然后:

sed -rn '/^[^\s]+\s+[F]/p' list.txt > result.txt,它应该在result.txt文件中返回以下输出:

60 FREDDIE 1201 +4 61 FINLAY 1200 -2