我尝试编写一个命令,通过在任何相关行中插入字符72之后的换行符,而不是在单词的中间插入格式化git提交消息的文本文件。如果字符72位于单词的中间,则应在字符72之前的行中的最后一个空格处插入换行符。以下内容:
sed -e "s/.\{72\}/&\n/g" < msg.md
不管字边界如何,都会在72位插入,但我无法想到如何正确地考虑这些边界。
可以使用更复杂的bash / python脚本或某些内容来完成每一行,但我很好奇是否可以完全在regex / sed中完成。
答案 0 :(得分:1)
您可以使用:
sed 's/.\{72\}[^[:blank:]]*[[:blank:]]*/&\n/g' msg.md
[^[:blank:]]*
将匹配72个字符后面的0或更多非空格,后跟[[:blank:]]*
,这是0或更多空格。
答案 1 :(得分:1)
sed 'y/ /³/
s/.*/\
&³/
:space
s/\(.*\n\)\([^³]\{0,72\}\)³/\1\2 /
t space
s/\(.*\) \([^³]*³\)/\1\
\2/
t space
s/.\(.*\)./\1/
' YourFile
--posix
在GNU sed上³
,如果有:使用另一个分隔符或者将其翻译为firste,然后返回到最后<强>阐释:强>
³
)+添加起始新行和尾随³
³
后跟{{1}除了最后³
之外用空格char替换它(事实上,我使用2组但是1就足够了,它可以保留早期测试)³
和一个³
并将其替换为第一组,空格替换为第二组对每一行做同样的事情,逐行采取行动