GNU/Linux >> Linux の 問題 >  >> Linux

「カット」を使用して最後のフィールドを見つける方法

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


Linux
  1. LinuxでディスクがSSDかHDDかを確認する方法

  2. 行の最後のフィールドでのソート

  3. Linuxでファイルを使用しているプロセスを見つける方法は?

  1. 検索を使用して複数のファイルの名前を変更するにはどうすればよいですか?

  2. カットを使用して区切り文字にさらにスペースを指定する方法は?

  3. Linux を使用してドライブ内のフォルダー数をカウントするにはどうすればよいですか?

  1. 最大スタック サイズを確認するにはどうすればよいですか?

  2. Linux で「find」の結果を mv にパイプする方法

  3. デフォルトのファイルマネージャを見つける方法は?