次の文字列を置き換える方法
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
次の変数を使用して最後の列を個別に印刷できます。NF
awk
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'