在每个数字后面将行分隔为多行

  • 本文关键字:分隔 数字 bash shell
  • 更新时间 :
  • 英文 :


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

现在我有这样的

a 111111b 222c 3d 444444

我需要一种方法把它送到

a 11111
b 222
c 3
d 444444

我一直在尝试用regex创建一个gawk,但我不知道有什么方法可以让它发挥作用。(我是个新手(

使用sed很简单。

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

使用awk相当容易。

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

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

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

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

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

示例使用/输出

在你的情况下,这将是:

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

相关内容

  • 没有找到相关文章

最新更新