2

だから私は、電子メールアドレスとニックネームを含む行がたくさんあるファイルを読み込もうとしています。以下のように、括弧で囲まれたこのニックネームを抽出しようとしています

email@somewhere.com (Tom)

だから私の考えはカットを使って単語を取得することでしたTomが、次のようなものになってしまうとこれは失敗します

email2@somewhereElse.com ("Bob")

Bob は引用符で囲まれているため、cut コマンドは次のように失敗します。

cut: <file>: Illegal byte sequence

これを行うためのより良い方法を知っている人はいますか? またはこの問題を解決する方法は?

4

3 に答える 3

8

エラーを回避するために、 localeto C(生の未解釈のバイト シーケンス) をリセットします。Illegal byte sequence

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

と思います

grep -o '(.*)' emailFile 

するべきです。「ファイル内のすべての行を調べます。開き括弧で始まるシーケンスを探し、次に閉じ括弧までの任意の文字を探します。文字列に一致するビットを stdout にエコーします。」

これにより、ニックネームの周りの引用符と括弧が保持されます。それらが必要ない場合は、それらを取り除くことができます:

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

(「どこでも、角括弧内の文字を何も置き換えないでください」)

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

ここでテスト済み

于 2013-02-03T07:00:52.253 に答える