Sedを使用してコロンの前のすべての文字を置き換える方法


25

次の文字列を置き換える方法

hd_ma_prod_customer_ro:*:123456789:john.doe

john.doeで

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

回答:


40

実際の意味は、最後のコロンまでをすべて削除し、そのjohn.doeままにしておきたいということです:

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

説明:

最初の行は、テスト文字列を単にsed例としてパイプします。

2番目は基本的なsed置換です。1番目と2番目の間の部分は/検索対象の正規表現であり、2番目と3番目の間の部分はそれを置き換えるものです(この場合、削除中は何もありません)。

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


7
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}'

1
使用する場合はawk、なぜ使用しないのawk -F:ですか?
グレアム14年

@Graeme、私はまだそれほど快適ではありませんawk。基本的に、私は最初に回答で得たコマンドをテストし、ユーザーの要件に応じてコマンドを変更しようとします。:)
ラメシュ14年

3
-Fオプションはawk、フィールドセパレータを指定します。awkコロンを使用するように指示した場合、コロンをタブに置き換える必要はありません。また、の$NF代わりに使用できる最後のフィールドを取得したい場合$4、これは常に3つのコロンがない場合に機能します。
グレアム14年

@Graeme、あなたが言及した変更を取り入れました。これでいいかどうか教えてください:)
ラメシュ

はい、完全に動作します!
グレアム14年


2

してみてください

編集:アンカーを削除しました

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

削除する

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

それはない何を求めOPの
iruvar

質問をもう一度読み直してください。
akash 14年

さて、あなたは気にしない、私のコメントの後、削除に潜入
iruvar

ああなるほど 。謝罪1_CR
akash

1
^アンカーは、いずれかの質問の場合、またはあなたの例の場合では違いはありません。で始まるアドレスは/.*すでにを意味し^ます。
mikeserv 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.