所以,我的问题是,我有一个包含很多名字的文件,我想使用命令提取信息。我想要一些以特定姓氏开头的名字,例如“d”。这是一个非常大的列表,我想简化工作。
答案1
使用您给出的示例,首先我们需要从网页。我复制了第一个表格,将其粘贴到电子表格(我的情况是 LibreCalc),然后将其导出为csv
文件 list.csv。生成的文件如下所示:
1921,2:47:29.8,Florestano Benedetti (ITA),1921-09-20,Bologna,Italy
1922,2:46:26,Gabriel Ruotsalainen (FIN),1922-09-10,Helsinki,Finland
1923,2:40:47,Aksel Jensen (DEN),1923-06-16,Windsor,England
1924,2:36:10,Shizo Kanaguri (JPN),1924-04-12,Tokyo,Japan
...
然后我们可以使用grep
、sed
、awk
或其他任何方式来处理文件。例如,使用awk
:
$ cat list.csv | awk -F, '$3 !~ /[Dd]/ { print; }'
1921,2:47:29.8,Florestano Benedetti (ITA),1921-09-20,Bologna,Italy
1923,2:40:47,Aksel Jensen (DEN),1923-06-16,Windsor,England
1937,2:30:38,Manuel Dias (POR),1937-03-28,Lisbon,Portugal
1938,2:30:27.6,Pat Dengis (USA),1938-05-30,Salisbury,Massachusetts,USA
...
这将打印出名称(第三列,因此$3
)不包含 aD
或 的任何行d
。有关更多详细信息,请参阅awk
、sed
或手册页。grep
答案2
Grep
Grep,在输入文件中搜索包含与给定模式列表匹配的行。
当它在某一行中找到匹配项时,它会默认将该行复制到标准输出,或者执行您使用选项请求的任何其他类型的输出。
可以简单地调用 Grep:
grep <string> filename
Grep 可以搜索复杂的模式来找到您需要的内容。
以下是用于创建正则表达式的一些特殊字符的列表:
. The period . matches any single character.
? The preceding item is optional and will be matched at most once.
* The preceding item will be matched zero or more times.
+ The preceding item will be matched one or more times.
欲了解更多详情,请查看: man grep