awk なしで?...しかし、awk を使えばとても簡単です:
echo 'maps.google.com' | awk -F. '{print $NF}'
AWK は、ポケットに入れておいた方がはるかに強力なツールです。-F フィールドセパレーターの場合、NF はフィールドの数です (最後のインデックスも表します)
次のようなことを試すことができます:
echo 'maps.google.com' | rev | cut -d'.' -f 1 | rev
説明
rev"maps.google.com" をmoc.elgoog.spamに反転しますcut区切り文字としてドット (つまり「.」) を使用し、最初のフィールドであるmocを選択します- 最後に、もう一度逆にして
comを取得します
cut だけを使用することはできません . grep を使用する方法は次のとおりです。 :
grep -o '[^,]*$'
他の区切り文字のコンマを置き換えます。
説明:
-o(--only-matching) は、パターンに一致する入力の部分のみを出力します (デフォルトでは、一致が含まれている場合は行全体を出力します)。[^,]コンマ以外の任意の文字に一致する文字クラスです。*直前のパターンに 0 回以上一致するため、[^,]*0 個以上のカンマ以外の文字と一致します。$文字列の末尾に一致します。- これをまとめると、パターンは文字列の末尾にある 0 個以上の非カンマ文字に一致します。
- 一致する候補が複数ある場合、
grep最も早く開始するものを優先します。したがって、最後のフィールド全体が一致します。
完全な例:
data.csv というファイルがあるとします。 含む
one,two,three
foo,bar
次に grep -o '[^,]*$' < data.csv 出力します
three
bar
パラメータ展開を使用します。これは、どのような外部コマンド cut よりもはるかに効率的です。 (または grep ) が含まれています。
data=foo,bar,baz,qux
last=${data##*,}
bash でのネイティブ文字列操作の概要については、BashFAQ #100 を参照してください。