所以我试图读取一个文件,其中包含一堆带有电子邮件地址的行,然后是昵称。我试图提取这个昵称,它被括号括起来,如下面的
email@somewhere.com (Tom)
所以我的想法只是用cut来得到Tom
这个词,但当我最终得到类似下面的内容时,这就被挫败了
email2@somewhereElse.com ("Bob")
因为Bob有引号,所以cut命令失败如下
cut: <file>: Illegal byte sequence
有谁知道更好的方法吗?或者解决这个问题的方法?
答案 0 :(得分:7)
将locale
重置为C
(未解释的原始字节序列)以避免Illegal byte sequence
错误。
locale charmap
LC_ALL=C cut ... | LC_ALL=C sort ...
答案 1 :(得分:1)
我认为
grep -o '(.*)' emailFile
应该这样做。 “浏览文件中的所有行。查找以开放的parens开头的序列,然后查看任何字符,直到关闭parens。回显匹配字符串的位到stdout。”
这会保留昵称周围的引号以及括号。如果你不想要那些,你可以剥掉它们:
grep -o '(.*)' emailFile | sed 's/[(")]//g'
(“用方括号替换方括号之间的任何字符,无处不在”)
答案 2 :(得分:0)
perl -lne '$_=~/[^\(]*\(([^)]*)\)/g;print $1'
测试here