使用sed在特定位置插入一个字符

时间:2011-07-27 13:25:19

标签: insert sed character

如何使用sed将短划线插入字符串(例如2011072011-07)?

4 个答案:

答案 0 :(得分:18)

echo "201107" | sed 's/201107/2011-07/'

应该有效。但开玩笑,这是更通用的解决方案:

echo "201107" | sed 's/^\(.\{4\}\)/\1-/' 

这将在前四个字符后插入-

HTH

答案 1 :(得分:3)

对于不确定的sed版本(至少我的GNU sed 4.2.2),你可以这样做:

echo "201107" | sed 's/./&-/4'

/4 - >替换第4次出现(搜索模式.

& - >返回参考整场比赛

我从另一篇文章中了解到这一点:https://unix.stackexchange.com/questions/259718/sed-insert-character-at-specific-positions

答案 2 :(得分:0)

以下匹配仅对四位数的字符串执行替换,后跟两位数的字符串。

$ echo '201107' | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)/\1-\2/'
2011-07

Sed正则表达式有点尴尬,因为缺少\d,需要转义括号和括号(但不是大括号)。如果不是因为这些特性,我的解决方案应该's/(\d{4})(\d{2})/\1-\2/'

答案 3 :(得分:0)

我知道这是在挖掘一只巨大的恐龙,但是如果你想消除6个尾随零

echo '20110715000000' | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{6\}\)/\1-\2-\3/'