我有一个名为 text.csv 的文件,其内容如下所述
10 个小脚趾
这是ThaT
5 有趣 0
一二三
树两次
我试图通过用括号括起来来替换数字,因此预期输出是
(1)(0) 小脚趾
这是ThaT
(5) 搞笑 (0)
一二三
树两次
我使用 sed 命令作为
sed 's/[0-9]/(&)/g' text.csv
然后它得到正确的输出,但后来我尝试给出以下内容
sed 's/[0-9]*/(&)/g' text.csv
然后它给出以下输出。
(10) ()T()i()n()y()()T()o()e()s()
()T()h()i()s() ()i()s() ()T()h()a()T()
(5) ()f()u()n()n()y() (0)
()一二三()
()T()r()e()e() ()T()w()i()c()e()
因此,* 的存在意味着应该搜索紧邻的前一个字符并将其替换为 (&),但这种情况并未发生。使用 * 进行搜索我哪里错了。
答案1
x*
表示任意序列0或更多x
es。它是 的缩写x\{0,\}
。所以它也匹配空字符串。匹配于1或更多,\{1,\}
如果您启用扩展正则表达式-E
(仅某些sed
实现)可以缩短为+
.
请注意,通常意味着在字符和字符[0-9]
之间排序的任何整理元素,这取决于语言环境、操作系统或实现,并不意味着仅。0
9
sed
0123456789
所以:
sed 's/[0123456789]\{1,\}/(&)/g'
或者:
sed -E 's/[0123456789]+/(&)/g'