我很难理解我在 this article 中看到的数字解析 sed 命令:
sed -i ':a;s/\B[0-9]\{3\}\>/,&/;ta' numbers.txt
我是一个 sed
新手,所以这是我能够弄清楚的:
&
添加到已有的内容而不是替代:a; ... ;ta
在行上递归调用替换,直到搜索找不到更多返回值
我希望大家能解释一下
-i
是做什么的?虽然我确定它在那里,但我似乎无法在手册页上找到它。- 我有点不清楚
\B
在这里完成了什么?也许它有助于左右解析优先级,但我不知道如何。所以最后... - 最重要的是,为什么它执行的是从右到左而不是从左到右?例如,命令的哪一部分阻止它执行类似的操作:
1234566778,9 ---> 1234,566,778,9
最佳答案
平分这个命令:
sed -i ':a;s/\B[0-9]\{3\}\>/,&/;ta' numbers.txt
-i # inline editing to save changes in input file
\B # opposite of \b (word boundary) - to match between words
[0-9] # match any digit
\{3,\} # match exact 3 digits
\> # word boundary
& # use matched pattern in replacement
:a # start label a
ta # go back to label a until \B[0-9]\{3\}\> is matches
是的,这个 sed 命令确实从最右边的 3 位数字开始匹配/替换,并一直向左移动直到找到 3 位数字。
更新:但是在循环中查看这个低效 sed 命令我推荐这个更简单和更快的awk:
awk '/^[0-9]+$/{printf "%\047.f\n", $1}' file
20,130,607,215,015
607,220,701
992,171
输入文件在哪里:
cat file
20130607215015
607220701
992171
关于regex - 这个 sed 命令如何用逗号解析数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31548978/