String 如何按单词/字符将一行一分为二?

String 如何按单词/字符将一行一分为二?,string,bash,awk,cut,wc,String,Bash,Awk,Cut,Wc,我想转换成: Hello Hello Hi Hello Hello Hi Hi Hi Hi Hello 进入: 我想把一行一分为二,让它们有尽可能多的字符,而不切断一个单词 我想我可能可以用wc-w、wc-c、cut和/或awk来做,但也许你们可以提供一些更好的想法 这可能是折叠的工作,一个方便的包装行的工具: $ s="Hello Hello Hi Hello Hello Hi Hi Hi Hi Hello" $ fold -w $(( ${#s} / 2 + 1)) -s <<

我想转换成:

Hello Hello Hi Hello Hello Hi Hi Hi Hi Hello
进入:

我想把一行一分为二,让它们有尽可能多的字符,而不切断一个单词

我想我可能可以用wc-w、wc-c、cut和/或awk来做,但也许你们可以提供一些更好的想法

这可能是折叠的工作,一个方便的包装行的工具:

$ s="Hello Hello Hi Hello Hello Hi Hi Hi Hi Hello"
$ fold -w $(( ${#s} / 2 + 1)) -s <<< "$s"
Hello Hello Hi Hello
Hello Hi Hi Hi Hi Hello
这可能是一个折叠作业,一个方便的包装行的工具:

$ s="Hello Hello Hi Hello Hello Hi Hi Hi Hi Hello"
$ fold -w $(( ${#s} / 2 + 1)) -s <<< "$s"
Hello Hello Hi Hello
Hello Hi Hi Hi Hi Hello

这个问题被交叉发布在AskUbuntu上:这不是正则表达式的问题,至少不是纯表达式。显然,最好是按空格分割,计算单词总数,找到最靠近原始字符串中点的空格,然后用换行符替换。不确定awk对此会有多友好,尽管…@ericramos1990这通常被认为是一件坏事。例如,请参见:。一个原因是回答问题的人很可能会浪费时间。很抱歉,我以后会记住这一点,谢谢。在这种情况下,由于答案不同,所以交叉张贴也没那么糟糕,我还学习了命令折叠。这个问题被交叉贴在AskUbuntu上:这不是正则表达式的东西,至少不是纯表达式。显然,最好是按空格分割,计算单词总数,找到最靠近原始字符串中点的空格,然后用换行符替换。不确定awk对此会有多友好,尽管…@ericramos1990这通常被认为是一件坏事。例如,请参见:。一个原因是回答问题的人很可能会浪费时间。我很抱歉,我以后会记住这一点,谢谢。在这种情况下,由于答案不同,所以跨越帖子也没那么糟糕,我学会了命令折叠。太好了,谢谢你,我会查看折叠,我从没听说过!出于好奇,它在Linux发行版中是否可移植和/或频繁使用?我不知道它的可移植性如何,但例如,我甚至可以在cygwin中找到它。所以它看起来是相当多的。你应该知道折叠在字节上而不是在字符上。不,折叠在屏幕列上,这些列既不是字符也不是字节。例如,选项卡可以是多列,退格字符将计为-1列位置。但是,如果给定-b参数,它可以折叠字节。fold是一个核心UNIX工具,如grep、sed、tr等。因此应该在任何地方都可以使用。@EdMorton我的观点是fold不能处理宽字符。在这方面,你的说法也是错误的。很好,谢谢你,我会调查的,我从来没有听说过!出于好奇,它在Linux发行版中是否可移植和/或频繁使用?我不知道它的可移植性如何,但例如,我甚至可以在cygwin中找到它。所以它看起来是相当多的。你应该知道折叠在字节上而不是在字符上。不,折叠在屏幕列上,这些列既不是字符也不是字节。例如,选项卡可以是多列,退格字符将计为-1列位置。但是,如果给定-b参数,它可以折叠字节。fold是一个核心UNIX工具,如grep、sed、tr等。因此应该在任何地方都可以使用。@EdMorton我的观点是fold不能处理宽字符。在这方面,你的说法也是错误的。
fold - wrap each input line to fit in specified width

   -s, --spaces
          break at spaces

   -w, --width=WIDTH
          use WIDTH columns instead of 80