所以我选择了一些文本文件,所有这些都在一行上我需要一种方法把每一个数字后面的行分成多行。
现在我有这样的
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