在字符串中的特定数量的字符后添加换行符

时间:2015-08-07 10:05:54

标签: regex string bash sed insert

我找到了这个帖子:

How to insert a new line character after a fixed number of characters in a file

但不幸的是,那里的答案对我没有帮助。

我有一个巨大的字符串$temp,我希望在特定数量的字符(例如20)之后切断它以与上面的行匹配。在该数量的字符之后应该添加\n,最后应将格式化的字符串插入变量中。如果弦的长度<1,则不应该切割。数字。

现在我坚持

sed -e "s/.\{20\}/&\n/g" <<< $temp

但它不起作用。 \n,而是添加空格。

2 个答案:

答案 0 :(得分:0)

最简单的可能是使用fold实用程序,如您引用的主题中所建议的那样。例如:

printf "%s\n" "$temp" | fold -cw 20

当你说:

  

将其与上面的行匹配

...尝试uniq程序清除(或计算)重复项可能会有所帮助:

printf "%s\n" "$temp" | fold -cw 20 | uniq

当然,如果你想要一个新变量的输出,请将它包装在$()中,如下所示:

new="$(printf "%s\n" "$temp" | fold -cw 20 | uniq)"

答案 1 :(得分:0)

NewTemp="$( printf "%s" "${temp}" | sed -e 's/.\{20\}/&\
/g' )"
  • 你的sed很好但是如果应用程序没有特别考虑到这一点(如GNU sed的选项-i),那么当源和目标相同时总是有点棘手。
  • 如果可能,使用简单的引用(不需要替换)
  • 我更喜欢在每个sed版本上使用一个真正的新行(当不是在线时)而不是\n来获取availbel(posix不允许更换模式中的\n
  • 只需确定 temp 变量中现有新行的含义
    • 默认情况下每行的工作线(因此每行都是一行一个)
    • 如果使用多行(选项或加载缓冲区),新行IS也是.
    • 的字符