Sed を使用してコロンの前のすべての文字を置換するにはどうすればよいですか?

Sed を使用してコロンの前のすべての文字を置換するにはどうすればよいですか?

次の文字列を置き換えるにはどうすればいいですか

hd_ma_prod_customer_ro:*:123456789:john.doe

ジョン・ドウと

基本的には、最後のコロン (:) を探して、それより前とそれを含むすべてを削除する必要があります。

答え1

実際に意味しているのは、最後のコロンまでのすべてを削除し、そのまま残すことだと仮定しますjohn.doe

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
  sed 's/.*://'

説明:

sed最初の行は、例としてテスト文字列をパイプするだけです。

2つ目は基本的なsed代替1 番目と 2 番目の間にある部分は/検索する正規表現で、2 番目と 3 番目の間にある部分はそれを置き換えるもの (この場合は削除するため何もなし) です。

正規表現では、.任意の文字と一致し、*これを任意の回数 (0 を含む) 繰り返し、:コロンと一致します。したがって、実質的にはコロンが後に続く任意の文字です。コロン.*を含めることができるため、一致は「貪欲」であり、最後のコロンまでのすべてが含まれます。

答え2

使用する別の方法awk:

awk -F: '{ print $NF }'

答え3

sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'

私は以下のすべての出現を置き換えます:とともにタブ次に、を使用してawk文字列 john.doe を抽出します。

ファイルがない場合は、これを試してください。

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | 
awk -F'\t' '{print $4}'

Graeme のコメントに従って、以下のように変数をawk使用して最後の列だけを印刷することができます。NFawk

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'

グレアムのコメントを取り入れて不要なものを排除するsed

コマンドは以下のように変更できます。

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'

答え4

してみてください

echo 'abc:fjk' |sed 's/.*:/john.doe/g'

削除する

echo 'abc:fjk' |sed 's/.*://g'

関連情報