文字列を検索し、ファイルから特定の列を返します。

文字列を検索し、ファイルから特定の列を返します。

以下を含む 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

おすすめ記事