変数があります:
A="Some variable has value abc.123"
この値、つまりabc.123
を抽出する必要があります。これはbashで可能ですか?
値がどこから始まるのかをどうやって知るのですか?常に5番目と6番目の単語である場合は、たとえば次を使用できます。
B=$(echo $A | cut -d ' ' -f 5-)
これはcut
コマンドを使用して、Wordの区切り文字として単純なスペースを使用して、行の一部を切り取ります。
最も簡単です
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
と組み合わせると、文字列に含まれるフィールドの数に関係なく、文字列の最後のフィールドが出力されます。
はい;この:
A="Some variable has value abc.123"
echo "${A##* }"
これを印刷します:
abc.123
(${parameter##Word}
表記については Bash Reference Manual の§3.5.3 "Shell Parameter Expansion"で説明しています。)
パラメーター展開を使用したいくつかの例
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