在bash中剪切命令终止于引号

时间:2013-02-03 05:26:06

标签: linux bash shell unix scripting

所以我试图读取一个文件,其中包含一堆带有电子邮件地址的行,然后是昵称。我试图提取这个昵称,它被括号括起来,如下面的

email@somewhere.com (Tom)

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

email2@somewhereElse.com ("Bob")

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

cut: <file>: Illegal byte sequence

有谁知道更好的方法吗?或者解决这个问题的方法?

3 个答案:

答案 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