我无法将'find'的结果传递给sed。我把它简化为最简单的事情,我得到了这个:
echo 1234567890abcdefghijklmnopqrstuvwxyz | sed 's/[:digit:]*/X/g'
我希望得到:
Xabcdefghijklmnopqrstuvwxyz
我得到的输出是:
X1X2X3X4X5X6X7X8X9X0XaXbXcXeXfXhXjXkXlXmXnXoXpXqXrXsXuXvXwXxXyXzX
这不是我所期待的。如果我将我的正则表达式改为:
echo 1234567890abcdefghijklmnopqrstuvwxyz | sed 's/[0-9]*/X/g'
我明白了:
XaXbXcXdXeXfXgXhXiXjXkXlXmXnXoXpXqXrXsXtXuXvXwXxXyXzX
更接近我的预期。我刚刚意识到我在标准终端中没有这个问题,只在aquamacs eshell ...我认为它必须是字符编码问题?也许unicode相关?我如何确定这一点,以及如何解决这个问题?
答案 0 :(得分:2)
请记住,reg-exp char'*'表示'匹配零或更多以前的char'(在本例中为char类)
正如@SamHoice所说,你需要'[[:digit:]]'。
所以你可以减少一行中的所有数字1 X
echo 1234567890abcdefghijklmnopqrstuvwxyz | sed 's/[[:digit:]][[:digit:]]*/X/g'
Xabcdefghijklmnopqrstuvwxyz
或者用X代替所有数字
echo 1234567890abcdefghijklmnopqrstuvwxyz | sed 's/[[:digit:]]/X/g'
XXXXXXXXXXabcdefghijklmnopqrstuvwxyz
如果这些都不起作用,请编辑您的问题以包含您输出所需的内容。
我希望这会有所帮助。
答案 1 :(得分:1)
第一个答案是字符类[:digit:]本身需要包含在[]中,所以它应该是[[:digit:]]。
仍然在第二部分工作。
答案 2 :(得分:0)
echo 1234567890abcdefghijklmnopqrstuvwxyz | sed 's/[0-9]\+\(.*\)/X\1/g'
[0-9] +匹配1234567890
\ 1是。*任何字母,但[:digit:]
除外