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 を参照してください。