次の行を含むファイルがあります。
user=<[email protected]>,
user=<[email protected]>,
user=<[email protected]>,
user=<[email protected]>,
user=<[email protected]>,
user=<[email protected]>,
このファイルから電子メールアドレスを抽出する最良の方法は何ですか?
答え1
awk
他の回答に記載されているとおりに使用できます。
sed
またはperl
同様のものを使用できますruby
。
perl -wlne '/<(.*)>/ and print $1' file
ただし、bash
必要に応じて使用することも可能です。
最初のステップ。ファイルを1行ずつ出力します。
while read line; do echo $line; done <file
次に、不要なプレフィックスとサフィックスを削除します。
while read line; do line=${line##user=<}; line=${line%%>,}; echo $line; done <file
同様に、より一般的で短いです。
while read line; do line=${line##*<}; echo ${line%%>*}; done <file
これはあなたの例で動作し、他のシェルでも動作します。
始まりと終わりから数文字を削除するには、次のようにします。
while read line; do echo ${line:6:-2}; done <file
man bash
詳細については、bash()の詳細なマニュアルページを読んでください。
答え2
おそらくこれより良い方法があるようですが、思いがけません。
awk -F '<|>' '{ print $2 }' filename
答え3
最新バージョンでbashの使用に固執する場合:
シェルパラメータ拡張:http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
文字列の長さ:http://wiki.bash-hackers.org/syntax/pe#string_length
部分文字列拡張:http://wiki.bash-hackers.org/syntax/pe#substring_expansion
#!/bin/bash
while read line; do
len=$((${#line}-8))
echo ${line:6:$len}
done < file