shell 在每个数字后将行拆分为多行

55ooxyrt  于 2022-11-16  发布在  Shell
关注(0)|答案(2)|浏览(214)

所以我有一个文本文件的选择,所有这些都在一行上,我需要一种方法来分离成多行后,每个数字行。
现在我有了这样的东西

a 111111b 222c 3d 444444

我需要一种方法让它变成这样

a 11111
b 222
c 3
d 444444

我一直在尝试用regex创建一个gawk,但是我不知道有什么方法可以让它工作。(我对shell相当陌生)

50pmv0ei

50pmv0ei1#

简单的sed

$: cat file
a 51661b 99595c 65652d 51515

$: sed -E 's/([a-z] [0-9]+)\n*/\1\n/g' file
a 51661
b 99595
c 65652
d 51515

使用awk非常简单。

$: awk '{ print gensub("([a-z] [0-9]+)\n*", "\\1\n", "g") }' file
a 51661
b 99595
c 65652
d 51515

甚至可以只使用bash内置...但不要...

while read -r line
do while [[ "$line" =~ [a-z]\ [0-9]+ ]]
   do printf "%s\n" "$BASH_REMATCH"
      line=${line#$BASH_REMATCH}
   done
done < file
a 51661
b 99595
c 65652
d 51515
qv7cva1a

qv7cva1a2#

Paul已经给出了一个很好的答案,但是对于sed,一个更直接的表达式可以说是:

sed -E 's/([0-9])([^0-9])/\1\n\2/g' file

使用/输出示例

在您的情况下,这将是:

$ echo "a 111111b 222c 3d 444444" | sed -E 's/([0-9])([^0-9])/\1\n\2/g'
a 111111
b 222
c 3
d 444444

相关问题