2

因此,我试图读取一个文件,该文件包含一堆带有电子邮件地址的行,然后是其中的昵称。我正在尝试提取这个用括号括起来的昵称,如下所示

email@somewhere.com (Tom)

所以我的想法只是使用 cut 来理解这个词Tom,但是当我最终得到以下内容时,这被挫败了

email2@somewhereElse.com ("Bob")

因为 Bob 有引号,所以 cut 命令失败如下

cut: <file>: Illegal byte sequence

有谁知道这样做的更好方法?或解决此问题的方法?

4

3 回答 3

8

将您的重置localeC(原始未解释的字节序列)以避免Illegal byte sequence错误。

locale charmap
LC_ALL=C cut ... | LC_ALL=C sort ...
于 2013-02-03T10:55:42.373 回答
1

我觉得

grep -o '(.*)' emailFile 

应该这样做。“遍历文件中的所有行。查找以打开括号开头的序列,然后是任何字符,直到关闭括号。将与字符串匹配的位回显到标准输出。”

这会保留昵称周围的引号......以及括号。如果你不想要这些,你可以剥离它们:

grep -o '(.*)' emailFile | sed 's/[(")]//g'

(“将方括号之间的任何字符替换为空,无处不在”)

于 2013-02-03T05:30:07.053 回答
0
perl -lne '$_=~/[^\(]*\(([^)]*)\)/g;print $1'

在这里测试

于 2013-02-03T07:00:52.253 回答