-1

シェルスクリプトで住所全体から名前を出力したかったのです。したがって、user1@12.12.23.234 は出力「user1」を提供し、同様に 11234@12.123.12.23 は出力 11234 を提供する必要があります。

4

3 に答える 3

5

端末からの読み取り:

$ IFS=@ read user host && echo "$user"
<user1@12.12.23.234>
user1

変数からの読み取り:

$ address='user1@12.12.23.234'
$ cut -d@ -f1 <<< "$address"
user1
$ sed 's/@.*//' <<< "$address"
user1
$ awk -F@ '{print $1}' <<< "$address"
user1
于 2012-10-10T21:20:47.960 に答える
4

bash in place 編集の使用:

EMAIL='user@server.com'
echo "${EMAIL%@*}

これは Bash に組み込まれているため、移植性はあまり高くない可能性があります (たとえば、shリンクされていない場合は実行されません/bin/bash)。ただし、編集を処理するプロセスをフォークしないため、おそらく高速です。

sed を使用:

echo "$EMAIL" | sed -e 's/@.*//'

これは sed に、その@文字と、その後の行末までの文字を何も置換しないように指示します。つまり、. の後のすべてを削除します@

このオプションは、ファイルに複数の電子メールが保存されている場合におそらく優れているため、次のようなことができます

sed -e 's/@.*//' emails.txt > users.txt

これが役立つことを願っています=)

于 2012-10-10T21:26:31.003 に答える
0

expr私はこの種のものに使用する傾向があります:

address='user1@12.12.23.234'
expr "$address" : '\([^@]*\)'

これは、exprパターン マッチングおよび抽出機能のために使用されます。翻訳すると、上記は次のように述べ$addressています@

このexprツールは Posix でカバーされているため、かなり移植性が高いはずです。

注意として、 の一部の歴史的なバージョンでは、オプションとしてexprリーディング付きの引数が解釈さ-れます。それを防ぎたい場合は、文字列の先頭に余分な文字を追加して、次のように一致しないようにすることができます。

expr "x$address" : 'x\([^@]*\)'
于 2012-10-10T22:11:00.820 に答える