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

ire*_*rek 18 sed insert character

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

Zso*_*kai 18

echo "201107" | sed 's/201107/2011-07/'
Run Code Online (Sandbox Code Playgroud)

应该管用.但开玩笑,这是更通用的解决方案:

echo "201107" | sed 's/^\(.\{4\}\)/\1-/' 
Run Code Online (Sandbox Code Playgroud)

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

HTH


Joh*_*ong 6

对于不确定的 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


Eri*_*son 0

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

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

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