2

「検索」の結果を sed にパイプするのに問題がありました。壊すことができる最も単純なものに単純化したところ、次のようになりました。

echo 1234567890abcdefghijklmnopqrstuvwxyz | sed 's/[:digit:]*/X/g'

私は得ると思っていました:

Xabcdefghijklmnopqrstuvwxyz

これから得られる出力は次のとおりです。

X1X2X3X4X5X6X7X8X9X0XaXbXcXeXfXhXjXkXlXmXnXoXpXqXrXsXuXvXwXxXyXzX

これは私が期待していたものではありません。正規表現を次のように変更すると:

echo 1234567890abcdefghijklmnopqrstuvwxyz | sed 's/[0-9]*/X/g'

私は得る:

XaXbXcXdXeXfXgXhXiXjXkXlXmXnXoXpXqXrXsXtXuXvXwXxXyXzX

これは私が期待したものに近いです。この問題は標準端末ではなく、aquamacs eshell でのみ発生することに気付きました...文字エンコーディングの問題だと思いますか? たぶんユニコード関連?これを確実に判断するにはどうすればよいですか? また、この問題を解決するにはどうすればよいですか?

4

3 に答える 3

2

reg-exp char'*'は、'前のcharの0個以上に一致する'(この場合はcharクラス)を意味することに注意してください。

@SamHoiceが指摘したように、「[[:digit:]]」が必要です。

したがって、1行のすべての桁を減らすことができます1 X

echo 1234567890abcdefghijklmnopqrstuvwxyz | sed 's/[[:digit:]][[:digit:]]*/X/g'
Xabcdefghijklmnopqrstuvwxyz

または、すべての数字をXに置き換えます

echo 1234567890abcdefghijklmnopqrstuvwxyz | sed 's/[[:digit:]]/X/g'
XXXXXXXXXXabcdefghijklmnopqrstuvwxyz

これらのいずれも機能しない場合は、質問を編集して、必要なものを出力として含めてください。

これがお役に立てば幸いです。

于 2011-11-20T21:01:30.010 に答える
1

1 番の答えは、文字クラス [:digit:] 自体を [] で囲む必要があるため、[[:digit:]] にする必要があるということです。

引き続き第二部制作中。

于 2011-11-20T20:09:17.940 に答える
0
echo 1234567890abcdefghijklmnopqrstuvwxyz | sed 's/[0-9]\+\(.*\)/X\1/g'

[0-9]+ 1234567890 に一致

\1 は .* [:digit:] を除く任意の文字です。

于 2011-11-23T10:56:04.983 に答える