unix bash – ¿Por qué mi expresión regular no funciona usando sed en bash script en Mac OSX?

Pregunta:

Estoy intentando capturar CBX-1234 de la cadena CBX-1234--CBX-5678 o CBX-12345--CBX-5678 . Estoy usando un script bash en Mac OSX usando sed para ejecutar la expresión regular.

string="CBX-1234--CBX-5678"
shortenedString=$(echo "$string" | sed "s/^([A-Za-z]+-[0-9]+)/\1/")

Esto genera el siguiente mensaje de error:

sed: 1: "s / ^ ([A-Za-z] + – [0-9] +) / \ 1 /": \ 1 no definido en el RE

¿Cómo puedo capturar la subcadena? Estoy abierto a sugerencias usando sed u otros medios en bash.

Respuesta:

-E agregar -E a la línea de comando sed para que use expresiones regulares extendidas:

sed -E 's/^([A-Za-z]+-[0-9]+)/\1/'

Si lo que quiere hacer es acortar la cadena CBX-1234--CBX-5678 a CBX-1234 , además necesita modificar la sustitución para tener en cuenta toda la cadena:

sed -E 's/^([A-Za-z]+-[0-9]+).*/\1/'

Alternativamente, puede usar la expansión del parámetro bash

shortenedString="${string%%--*}"

Esto eliminará todo de $string desde la primera aparición de -- .

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım