我有这条线
word1 word2 1234 4567 word3 8901 word4 word5 2541 5142 word5
我想拆分此行以便在数字字段之前或数字字段之后的字母数字字段之前插入换行符,因此输出将是:
word1 word2
1234
4567
word3
8901
word4 word5
2541
5142
word5
所有字母数字字段都以字母开头
我有这条线
word1 word2 1234 4567 word3 8901 word4 word5 2541 5142 word5
我想拆分此行以便在数字字段之前或数字字段之后的字母数字字段之前插入换行符,因此输出将是:
word1 word2
1234
4567
word3
8901
word4 word5
2541
5142
word5
所有字母数字字段都以字母开头
解释:
perl -pe
:在每行输入和打印结果上运行以下 Perl 脚本s/(\s)([0-9]+)/$1\n$2/g
: 空格 + 数字字段 -> 空格 +换行符+ 数字字段s/(\s)([0-9]+)(\s+)([a-zA-Z])/$1$2\n$4/g
: 空格 + 数字字段 + 空格 + 字母数字字段 -> 空格 + 数字字段 +换行符+ 字母数字字段g
每个替换末尾的表示“全局”——对整行执行将以下代码放入 awk 脚本中。假设脚本被称为
do_magic.awk
使用调用脚本
do_magic.awk yourfile
结果是:
PS:我想出了一个可行的解决方案。在 freenode #awk 上,
geirha
提供了完整的答案。所以功劳归于他!听起来您想保留字母数字单词之间的空格并将所有其他单词转换为换行符,所以也许: