每 6 个空格后将一行转换为多行

Mee*_*han 2 unix bash shell awk sed

我有如下文字

Current state of abc : RUNNING Current state of def : RUNNING Current state of ghi : RUNNING
Run Code Online (Sandbox Code Playgroud)

我希望将这一行分成多行,如下所示

Current state of abc : RUNNING 
Current state of def : RUNNING 
Current state of ghi : RUNNING
Run Code Online (Sandbox Code Playgroud)

我尝试使用 tr 命令tr ' ' '\n',但它会在每个空格后打印行。

gle*_*man 5

继续思考tr

tr -s ' ' '\n' | paste -d ' ' - - - - - -
# or, handle tabs too
tr -s '[:space:]' '\n' | paste -d ' ' - - - - - -
Run Code Online (Sandbox Code Playgroud)

或者 sed,每 6 个单词后插入一个换行符

sed -E 's/([^[:space:]]+[[:space:]]+){6}/&\n/g'
Run Code Online (Sandbox Code Playgroud)

Perl 中同样的想法

perl -pe 's/(\S+\s+){6}/$&\n/g'
Run Code Online (Sandbox Code Playgroud)

或 GNU grep for-o\S/\s

grep -Eo '(\S+\s+){5}\S+'
Run Code Online (Sandbox Code Playgroud)

或 GNU awk 用于多字符RSand RTand \S/\s

awk -v RS='(\\S+\\s+){5}\\S+' 'RT{print RT}'
Run Code Online (Sandbox Code Playgroud)

  • `(\S+\s+){6}` 将在前 2 行输出行的末尾打印空格,这可能是不可取的,而 `(\S+\s+){5}\S+` 则不会这样做。希望您不介意我添加 grep 和 awk 替代品,如果您这样做,请随意回滚(抱歉),只是觉得添加另一个如此相似的答案是不对的。 (2认同)