web-dev-qa-db-ja.com

trを使用して文字の重複を1文字に置き換えることは可能ですか

#のすべての出現を取得しようとしています。それらが連続している場合は、1つの#に置き換えます。

例えば.

 ab ### cde fghi## jklm

になるだろう:

ab # cde, fghi# jklm

私の最初の目標は、連続するすべての数字を#で置き換えることでした。 120->#および3->#。しかし、120-> ###が見つかりました。だから今、私はこの新しい問題を残しています。

7
user652437

tr -sの使用:

$ echo 'ab ### cde fghi## jklm' | tr -s '#'
ab # cde fghi# jklm

-s入力の最後のオペランド(string1またはstring2のいずれか)にリストされている文字の複数のオカレンスを、文字の単一のインスタンスに圧縮します。これは、すべての削除と変換が完了した後に発生します。


元の問題は次の方法で解決できた可能性があります。

sed -E 's/[0-9]+/#/g'

またはPOSIXly:

sed 's/[[:digit:]]\{1,\}/#/g'

または:

tr -s '[:digit:]' '[#*]'
20
jesse_b