我知道当我想要所有年份为 2018 年的记录时,如何使用类似下面的代码来提取文本文件中的某些记录。下面是我正在处理的示例记录,现在我需要代码从文件中数千个 10 位电话号码的列表中仅提取某些区号。我实际上必须提取几个区号,所以如果可以一次完成所有操作,那就太好了。这是我用于年份的代码:
grep 2018-01 mca159.182.txt
尽管上述方法有效,但它不会将这些记录提取到文件中,即使我输入了 -o 和我希望它创建并放入记录的文件名。它仍然只在终端中显示所有包含 2018 的结果,我别无选择,只能复制和粘贴。所以这个提示也会有所帮助,这样我就可以将结果放入新的文本文件中。这是我处理的文件格式:
phone dob size
9546022996 8/7/17 199000
9123842128 8/7/17 199000
所以说我想提取所有 10 位电话号码或实际上我想要的是整个记录,这意味着对于所有以 954、213、909 开头的号码,三列将被导出到一个新文件或至少在屏幕上。所以如果有效的话,它会找到上面的第一条记录作为匹配。
答案1
这里有两个问题:
1)如何将 grep 的输出发送到文件,而不是终端屏幕?
grep 的 -o 选项只显示任何行的匹配部分。您可能正在考虑用 sort -o 来回答这个问题?
grep 2018-01 mca159.182.txt > newfile.txt
将把任何匹配的行发送到 newfile.txt。
2)如何使用 grep 匹配文件中的前三个字符,以获得多个可能的匹配?
grep -E "^954|^213|^909" mca159.182.txt > newfile.txt
我们必须使用 -E 指定扩展正则表达式(或使用命令 egrep)才能使用 | 符号(在 grep 手册中称为交替运算符)。“^”字符是一个锚点,表示只匹配行首的三个字符。