
次の文字列を置き換えるにはどうすればいいですか
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
使用して最後の列だけを印刷することができます。NF
awk
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'