Tengo una cadena en el siguiente formato
id;some text here with possible ; inside
y desea dividirlo en 2 cadenas por primera aparición de ;. Entonces, debería ser: idysome text here with possible ; inside
Sé cómo dividir la cadena (por ejemplo, con cut -d ';' -f1), pero se dividirá en más partes ya que tengo ;dentro de la parte izquierda.
bash
shell-script
string
split
gakhov
fuente
fuente

idystringRespuestas:
cutSuena como una herramienta adecuada para esto:Pero
reades aún más adecuado:fuente
readpuesto que estoy usandobash. Gracias @manatwork!cutenfoque solo funcionará cuando "$ s" no contenga caracteres de nueva línea. leer está en cualquier shell similar a Bourne. <<< está en rc, zsh y versiones recientes de bash y ksh93 y es el que no es estándar.-aalguna razón al mencionarbashla deread. (Evidentemente no sirve de nada aquí)-f 2-en elstring="$( cut -d ';' -f 2- <<< "$s" )"; echo "$string"comando. Esto es lo que ignora el resto de los delimitadores en la cadena para la impresión. No es evidente cuando se mira en la página del manual decutCon cualquier estándar sh (incluyendo bash):
readlas soluciones basadas funcionarían para valores de un solo carácter (y con algunos shells, de un solo byte)$sepdistintos de espacio, tabulación o nueva línea y solo si$sno contienen caracteres de nueva línea.cutLas soluciones basadas solo funcionarían si$sno contienen caracteres de nueva línea.sedpodrían idearse soluciones que manejen todos los casos de esquina con cualquier valor de$sep, pero no vale la pena ir tan lejos cuando hay soporte incorporado en el shell para eso.fuente
Como mencionó que desea asignar los valores a id y string
primero asigne su patrón a una variable (digamos str)
Ahora tienes tus valores en las variables respectivas
fuente
some_command, entonces su patrón se almacenará en $ 1 y usará el código anterior con 1 en lugar de strAdemás de las otras soluciones, puede probar algo
regexbasado:o dependiendo de lo que intente hacer exactamente, podría usar
dónde
\1y\2contener las dos subcadenas que estabas deseando.fuente
Solución en bash estándar:
fuente