web-dev-qa-db-ja.com

bashで文字列の最後の部分をどのように抽出しますか?

変数があります:

A="Some variable has value abc.123"

この値、つまりabc.123を抽出する必要があります。これはbashで可能ですか?

25
user710818

値がどこから始まるのかをどうやって知るのですか?常に5番目と6番目の単語である場合は、たとえば次を使用できます。

B=$(echo $A | cut -d ' ' -f 5-)

これはcutコマンドを使用して、Wordの区切り文字として単純なスペースを使用して、行の一部を切り取ります。

9
unwind

最も簡単です

echo $A | awk '{print $NF}'

編集:この仕組みの説明...

awkは、デフォルトで空白を区切り文字として使用して、入力をさまざまなフィールドに分割します。 NFの代わりに5をハードコーディングすると、入力の5番目のフィールドが出力されます。

echo $A | awk '{print $5}'

NFは組み込みのawk変数で、現在のレコードのフィールドの総数を示します。文字列"Some variable has value abc.123"には5つのフィールドがあるため、次のコードは5を返します。

echo $A | awk '{print NF}'

$NFと組み合わせると、文字列に含まれるフィールドの数に関係なく、文字列の最後のフィールドが出力されます。

76
gammay

はい;この:

A="Some variable has value abc.123"
echo "${A##* }"

これを印刷します:

abc.123

${parameter##Word}表記については Bash Reference Manual の§3.5.3 "Shell Parameter Expansion"で説明しています。)

34
ruakh

パラメーター展開を使用したいくつかの例

A="Some variable has value abc.123"
echo "${A##* }"

abc.123

「」スペースでの最長一致

echo "${A% *}"

Some variable has value

の最長一致。ドット

echo "${A%.*}"

Some variable has value abc

「」スペースの最短一致

echo "${A%% *}"

some

続きを読む Shell-Parameter-Expansion

10
koola