sed で数字を「@」に置き換えると、各文字の間に「@」が挿入されます。

sed で数字を「@」に置き換えると、各文字の間に「@」が挿入されます。

すべての数字を「@」記号に置き換えたいです。以下のsedコマンドを使用していますが、目的の結果が得られませんでした。

注文する -

echo "abc 434 pankaj 444" | sed 's/[0-9]*/@/g'

結果 -

@a@b@c@ @ @p@a@n@k@a@j@ @

ベストアンサー1

まあ、簡単です。[0-9]*全体が次の文字列と一致します。0以上空の文字列を含む数値。空の文字列に一致するすべての項目は、2 つの文字間で一致するため、@入力内のすべての文字の間に置換が追加されます。@式はすべての連続した数字を一度に一致させるため、複数桁の文字列は1桁に置き換えられます。

したがって、入力文字列では、一致はab43次のようになります[0-9]+(明確にするためにいくつかのスペースが追加されます)。

    a   b   434
  ^   ^     ^^^- here, a string of some digits
  ^   ^- here, a zero-length string
  ^- here, a zero-length string

[0-9]正確に1桁の数字と一致するか、[0-9][0-9]*1つ以上の数字(または[0-9]+拡張正規表現)と一致するために使用されます。

おすすめ記事