如果找到数字,如何在 bash 中按模式分割文件

bal*_*lon 2 bash awk

我有这样的文字:

1Lorem ipsum dolor sit amet, consectetur adipiscing elit. 2Vivamus dictum, justo mattis sollicitudin pretium, ante magna gravida ligula, 3a condimentum libero tortor sit amet lectus. Nulla congue mauris quis lobortis interdum. 4Integer eget ante mattis ante egestas suscipit. Suspendisse imperdiet pellentesque risus, a luctus sem pellentesque nec. Curabitur vel luctus eros. Morbi id magna sit amet 5risus hendrerit porta. Praesent vitae sapien in nunc aliquet pharetra vitae sed lectus. Donec id magna magna. Phasellus eget rhoncus purus, vitae vestibulum nisl. 6Phasellus massa mi, ultricies id mi sit amet, tristique auctor mi. 
Run Code Online (Sandbox Code Playgroud)

我想按找到的数字分割文本,无论如何;喜欢:

1Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
2Vivamus dictum, justo mattis sollicitudin pretium, ante magna gravida ligula,
3a condimentum libero tortor sit amet lectus. Nulla congue mauris quis lobortis interdum.
...
Run Code Online (Sandbox Code Playgroud)

在 awk 中,我尝试过:

cat text | awk -F'/^[-+]?[0-9]+$/' '{for (i=1; i<= NF; i++) print $i}'
Run Code Online (Sandbox Code Playgroud)

其中-F/^[-+]?[0-9]+$/,用于测试是否为数字的模式。但它不会分割文本。

如果我将模式更改为任何分隔符,它都可以正常工作,那么我应该使用什么模式?

Daw*_*weo 5

AWK我将按照以下方式利用 GNU来完成这项任务,让file.txt内容成为

1Lorem ipsum dolor sit amet, consectetur adipiscing elit. 2Vivamus dictum, justo mattis sollicitudin pretium, ante magna gravida ligula, 3a condimentum libero tortor sit amet lectus. Nulla congue mauris quis lobortis interdum. 4Integer eget ante mattis ante egestas suscipit. Suspendisse imperdiet pellentesque risus, a luctus sem pellentesque nec. Curabitur vel luctus eros. Morbi id magna sit amet 5risus hendrerit porta. Praesent vitae sapien in nunc aliquet pharetra vitae sed lectus. Donec id magna magna. Phasellus eget rhoncus purus, vitae vestibulum nisl. 6Phasellus massa mi, ultricies id mi sit amet, tristique auctor mi.
Run Code Online (Sandbox Code Playgroud)

然后

awk 'BEGIN{RS="[-+]?[0-9]+"}{printf "%s%s%s", $0, NR==1?"":"\n", RT}' file.txt
Run Code Online (Sandbox Code Playgroud)

给出输出

1Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
2Vivamus dictum, justo mattis sollicitudin pretium, ante magna gravida ligula, 
3a condimentum libero tortor sit amet lectus. Nulla congue mauris quis lobortis interdum. 
4Integer eget ante mattis ante egestas suscipit. Suspendisse imperdiet pellentesque risus, a luctus sem pellentesque nec. Curabitur vel luctus eros. Morbi id magna sit amet 
5risus hendrerit porta. Praesent vitae sapien in nunc aliquet pharetra vitae sed lectus. Donec id magna magna. Phasellus eget rhoncus purus, vitae vestibulum nisl. 
6Phasellus massa mi, ultricies id mi sit amet, tristique auctor mi.
Run Code Online (Sandbox Code Playgroud)

解释:我通知 GNUAWK行分隔符 ( RS) 是 (-+) 重复 0 或 1 次,数字重复 1 次或多次。然后,对于每一行,我printf所说行的内容后跟换行符(仅适用于非第一个单词),后跟找到的行终止符(RT)。

(在 gawk 4.2.1 中测试)