如何使用sed将短划线插入字符串(例如201107
到2011-07
)?
答案 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/'