回答:
実際の意味は、最後のコロンまでをすべて削除し、そのjohn.doeままにしておきたいということです:
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
最初の行は、テスト文字列を単にsed例としてパイプします。
2番目は基本的なsed置換です。1番目と2番目の間の部分は/検索対象の正規表現であり、2番目と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}'
awk。基本的に、私は最初に回答で得たコマンドをテストし、ユーザーの要件に応じてコマンドを変更しようとします。:)
-Fオプションはawk、フィールドセパレータを指定します。awkコロンを使用するように指示した場合、コロンをタブに置き換える必要はありません。また、の$NF代わりに使用できる最後のフィールドを取得したい場合$4、これは常に3つのコロンがない場合に機能します。
してみてください
編集:アンカーを削除しました
echo 'abc:fjk' |sed 's/.*:/john.doe/g'
削除する
echo 'abc:fjk' |sed 's/.*://g'
^アンカーは、いずれかの質問の場合、またはあなたの例の場合では違いはありません。で始まるアドレスは/.*すでにを意味し^ます。
awk、なぜ使用しないのawk -F:ですか?