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

二つ目は基礎だ。sed置換。最初と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}'

不要な部分を取り除くために、Graemeのコメントをマージしました。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'

関連情報