Si tiene GNU awk
, se pueden hacer cosas con mucho más en control. Para esto, necesitarías construir match(source,/regex/,array)
.
Ejemplo:
entrada de la muestra para la prueba:
echo "$x"
p1=aaa,p2=bb,p3=cc,p4=dd,p5=ee,p6=ff,p7=gg,p8=hh,p9=ii,p10=jj
sed
funciona bien hasta \9
:
echo $x |sed -r 's/p1=([^,]+).*p2=([^,]+).*p3=([^,]+).*p4=([^,]+).*p5=([^,]+).*p6=([^,]+).*p7=([^,]+).*p8=([^,]+).*p9=([^,]+)(.*)/\1 \2 \3 \4 \5 \6 \7 \8 \9/'
aaa bb cc dd ee ff gg hh ii
sed
se rompió cuando se añade \10
, se considera es \1
+ 0
.
echo $x |sed -r 's/p1=([^,]+).*p2=([^,]+).*p3=([^,]+).*p4=([^,]+).*p5=([^,]+).*p6=([^,]+).*p7=([^,]+).*p8=([^,]+).*p9=([^,]+).*p10=([^,]+)(.*)/\1 \2 \3 \4 \5 \6 \7 \8 \9 \10/'
aaa bb cc dd ee ff gg hh ii aaa0
awk
para rescate cuando cualquier referencia de nuevo añadido se añade más de 9. A continuación se añade 10a refrence:
echo "$x" |awk '{match($0,/p1=([^,]+).*p2=([^,]+).*p3=([^,]+).*p4=([^,]+).*p5=([^,]+).*p6=([^,]+).*p7=([^,]+).*p8=([^,]+).*p9=([^,]+).*p10=([^,]+)(.*)/,a);print a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10]}'
aaa bb cc dd ee ff gg hh ii jj
Usted puede utilizar casi cualquier lenguaje de programación que le permite escribir una sola línea de este. 'perl -pe 's/yourregexhere/$ 1 $ 2 $ 3 $ 4 $ 5 $ 6 $ 7 $ 8 $ 9 $ 10 /' ' –
Es muy posible que pueda usar una expresión regular más simple que no necesite tantas referencias. Si muestra algunos datos de muestra y un ejemplo del resultado que desea, probablemente podamos mostrarle una forma más sencilla. –
suena como un trabajo para 'awk' - el campo 10 es' $ 10' –