設定ファイルがあるとしましょう。/etc/emails.conf
email1 = [email protected]
email2 = [email protected]
email3 = [email protected]
メールが届きたい2
私は次のことができます:
grep email2 /etc/emails.conf | cut -d'=' -f2
email2を入手してください。しかし、sedまたはawkコマンドを使用して「よりクールに」実行し、cutコマンドで残されたスペースを削除する方法は?
答え1
awkを使うのはどうですか?
awk -F = '/email2/ { print $2}' /etc/emails.conf
-F =
フィールドは「=」で区切られます。'/email2/ { print $2}'
「email2」に一致する行から2番目のフィールドを印刷します。
答え2
これ精密これに対応する内容は次のとおりです。
sed -n '/email2/{s/^[^=]*=\([^=]*\).*/\1/;p;}' < file
しかし、次のことをしたいかもしれません。
sed -n 's/^[^=]*email2[^=]*=[[:blank:]]*//p' < file
(つまり、email2
最初のフロント部分のみが一致し、2番目のフロント部分(ある場合)だけでなく、最初の右側=
(前のスペースをスキップ)にあるすべてのアイテムが返されます。=
=
答え3
perl -nlE 's/email2\s*=\s*// and say' file
どこ:
perl -nl
一行ずつするのか…s/email2 = //
可能であれば、検索されたEメールIDを削除してください...say
現在入力されている入力行を印刷します。\s*
0個以上の空白([\t\n]*と同じ)
答え4
フィールド区切り文字を「=」などの特殊値に設定する必要はありません。デフォルトでは、AWKはスキップする連続したスペースとタブをフィールド区切り文字として使用するため、ファイルの各行に3番目のフィールドスペースに先行文字のない3つのフィールドがあると解釈されます。
awk '/^email2/ { print $3 }'
生産する
[email protected]
上記は、で始まるすべての行とも一致しますemail2
。email20
たとえば、使用できます。
awk '$1 == "email2" { print $3 }'