以下を含む test_wd というファイルがあります。
dkde456:[email protected]
dkde123:[email protected]
dkde789:[email protected]
最初の列はユーザーID、2番目の列は完全なEメールアドレスです。私がdkde123だとしましょう。スクリプトを実行しましたが、結果は私のEメールアドレスにのみ送信されます。
私はこれを書いた:
LMUSER="`whoami`"
# So now I check whether my user-name is in the file:
if grep "${LMUSER}" test_wd
then echo "found"
# ??????? How to create a file and send this file to my email address
else
echo "not found"
exit 0
fi
スクリプトを実行してファイルを生成し、ファイルを自分のEメールアドレスに送信できるように列2を選択しようとしています。もしif条件文上記のコードで疑問符の代わりにtrueを返しますか?
ベストアンサー1
これを行う方法はいくつかあります。これはgrep
+cut
バリエーションです...
# surround LMUSER with ^ and : to make sure we match whole usernames only
email=$(grep "^${LMUSER}:" test_wd | cut -d: -f2)
# $email will be empty unless there was a match
if [[ -n $email ]]; then
# send the message to "$email"
fi
それともあなたはそれが好きですかsed
?
email=$(sed -n "s/^${LMUSER}:\(.*\)/\1/p" test_wd)
-n
印刷用に明示的に指定された行を除くすべての行のp
印刷をスキップします(たとえば、ここで置換フラグを含む行)。 「代替が発生した場合は、この行を印刷してください」と表示されます。
電子メールアドレスのみを抽出するには、その部分を括弧で囲む必要があります\(
。\)
その後、交換時にこの括弧内のテキストを逆参照:\1
。