utilizar texto script regulares para operadores metacaracteres manejo logicos korn expresiones ejemplos cadenas analizar regex linux bash sed sh

regex - texto - Devuelva una coincidencia de expresiones regulares en un script BASH, en lugar de reemplazarlo



operadores logicos bash (8)

Bueno, el Sed con s / "pattern1" / "pattern2" / g simplemente reemplaza globalmente todos los pattern1s al patrón 2.

Además de eso, sed mientras que por defecto imprime la línea entera por defecto. Sugiero pasar la instrucción a un comando de corte e intentar extraer los números que quieres:

Si estás buscando solo usar sed, usa TRE:

sed -n ''s/.*/(0-9/)/(0-9/)/(0-9/).*//1,/2,/3/g''.

No intento y ejecuta el comando anterior, así que asegúrate de que la sintaxis sea la correcta. Espero que esto haya ayudado.

Solo quiero hacer coincidir un texto en una secuencia de comandos BASH, he intentado usar sed, pero parece que no puedo hacer que sea solo la salida en lugar de reemplazarlo con algo.

echo -E "TestT100String" | sed ''s/[0-9]+/dontReplace/g''

Que dará salida: TestTdontReplaceString

Que no es lo que quiero, quiero que salga: 100

Lo ideal sería que quisiera poner todas las coincidencias en una matriz.

Editar: La entrada de texto está entrando como una cadena:

newName() { #Get input from function newNameTXT="$1" if [[ $newNameTXT ]]; then #Use code that im working on now, using the $newNameTXT string. fi }


No sé por qué nadie usa expr : es portátil y fácil.

newName() { #Get input from function newNameTXT="$1" if num=`expr "$newNameTXT" : ''[^0-9]*/([0-9]/+/)''`; then echo "contains $num" fi }


Puede hacer esto puramente en bash usando el operador de prueba del corchete doble [[ ]] , que almacena los resultados en una matriz llamada BASH_REMATCH :

[[ "TestT100String" =~ ([0-9]+) ]] && echo "${BASH_REMATCH[1]}"


Pure Bash . Utilice la sustitución de parámetros (sin procesos externos y tuberías):

string="TestT100String" echo ${string//[^[:digit:]]/}

Elimina todos los no dígitos.


Utilice grep. Sed es un editor. Si solo quieres hacer coincidir una expresión regular, grep es más que suficiente.


usando awk

linux$ echo -E "TestT100String" | awk ''{gsub(/[^0-9]/,"")}1'' 100


usando solo el shell bash

declare -a array i=0 while read -r line do case "$line" in *TestT*String* ) while true do line=${line#*TestT} array[$i]=${line%%String*} line=${line#*String*} i=$((i+1)) case "$line" in *TestT*String* ) continue;; *) break;; esac done esac done <"file" echo ${array[@]}


echo "TestT100String" | sed ''s/[^0-9]*/([0-9]/+/).*//1/'' echo "TestT100String" | grep -o ''[0-9]/+''

El método que utilice para colocar los resultados en una matriz depende en cierto modo de cómo se recuperan los datos reales. No hay suficiente información en su pregunta para poder guiarlo bien. Sin embargo, aquí hay un método:

index=0 while read -r line do array[index++]=$(echo "$line" | grep -o ''[0-9]/+'') done < filename

Aquí hay otra manera:

array=($(grep -o ''[0-9]/+'' filename))