使用流编辑器(sed)用千位分隔符拆分数字

使用流编辑器(sed)用千位分隔符拆分数字

我想使用 将句点作为千位分隔符插入到数字中sed。我该怎么做?

示例输入/输出:29371923471239应该变成29.371.923.471.239

答案1

尝试这个

echo "29371923471239" | sed -r ':A;s|([0-9]+)([0-9]{3})|\1,\2|g;t A'
29,371,923,471,239

它的工作原理是将数字分成两部分,即最后 3 位数字和其余部分。然后,它会将 a 添加,到其余部分的末尾,并返回到开头。您可以看到它使用

echo "29371923471239" | sed -r ':A;s|([0-9]+)([0-9]{3})|\1,\2|g'
29371923471,239

答案2

从: http://www.linuxtopia.org/online_books/linux_tool_guides/the_sed_faq/sedfaq4_007.html

sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta'

echo "981273981723" | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta' 981,273,981,723

答案3

使用 GHC-ONELINERS 获得更好的

$> echo -n 29371923471239 | ghc -e "import Data.List.Split" -e "putStrLn . reverse . intercalate \".\" . splitEvery 3 . reverse =<< getContents"
29.371.923.471.239

相关内容