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

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

这里得到了列的列表,如下:

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

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

73  LUCA    973     -1

答案1

awk '$2 ~ /^L/' file

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

正则表达式以以下形式匹配第二个字段 ( $2)^L

答案2

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

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

答案3

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

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

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

60 FREDDIE 1201 +4 61 FINLAY 1200 -2

答案4

另一个 grep 示例:

grep -E "[0-9]+ +L" file

+ 匹配前一个字符的一次或多次出现,因此在这种情况下,我们匹配至少一个数字字符和至少一个空格,后跟一个大写 L。

-E 需要将 + 解释为特殊字符而不是文字“+”

输出:

59  LOUIS   1202    +1
62  LEON    1137    +12
73  LUCA    973     -1

相关内容