Las operaciones de cadena de shell de Linux (longitud, búsqueda, reemplazo) se detallan en

  

Cuando se realizan programas de shell shell, a menudo involucran operaciones relacionadas con cadenas. Hay muchas instrucciones de comando, tales como: awk, sed puede hacer una variedad de operaciones de cadena. De hecho, el shell tiene una serie de símbolos de operación incorporados que pueden lograr efectos similares. Como saben, el uso de operadores internos omitirá el tiempo para iniciar un programa externo, por lo que la velocidad será muy rápida.


Primero, juzgue el valor de la cadena de lectura



expresión

que significa

$ {var} El valor de la variable var, igual que $ var $ {var-DEFAULT} Si no se declara var, entonces se usa $ DEFAULT como su valor * $ {var: -DEFAULT} Si no se declara var, O si el valor es nulo, entonces se usa $ DEFAULT como su valor * $ {var = DEFAULT} Si no se declara var, entonces se usa $ DEFAULT como su valor * $ {var: = DEFAULT} Si no se declara var, o Su valor es nulo, entonces $ DEFAULT es su valor * $ {var + OTHER} Si se declara var, su valor es $ OTHER, de lo contrario es una cadena nula $ {var: + OTHER} si var está establecido , entonces su valor es $ OTHER, de lo contrario es una cadena nula $ {var? ERR_MSG} Si no se declara var, imprima $ ERR_MSG * $ {var:? ERR_MSG} Si var no está establecida, imprima $ ERR_MSG * $ {! varprefix *} coincide con todas las variables previamente declaradas que comienzan con varprefix $ {! varprefix @} coincide con todas las variables previamente declaradas que comienzan con varprefix

Agregado " * " no significa: Claro que si cambias Si se ha establecido var, entonces su valor es $ var.

[chengmo @ localhost ~] $ echo $ {abc-'ok '} ok [chengmo @ localhost ~] $ echo $ abc

[chengmo @ localhost ~] $ echo $ {abc = 'ok'} ok [chengmo @ localhost ~] $ echo $ abcok


Si abc no declara " = " También asignará un valor a abc.

[chengmo @ localhost ~] $ var1 = 11; var2 = 12; var3 = [chengmo @ localhost ~] $ echo $ {! v @} var1 var2 var3 [chengmo @ localhost ~] $ echo $ { ! v *} var1 var2 var3


$ {! varprefix *} Similar a $ {! varprefix @}, puede buscar variables ya definidas por los caracteres de prefijo de nombre de variable, ya sea Valor nulo


Segundo, operaciones de cadena (longitud, lectura, reemplazo)



expresión

significado

$ {# cadena} $ longitud de cadena $ {cadena: posición} En $ cadena, extraiga la cadena $ {cadena: posición: longitud} de la posición $ posición en $ cadena, de La posición $ posición comienza a extraer la longitud de la subcadena $$ cadena # subcadena}. Desde el comienzo de la variable $ cadena, elimine la subcadena con la concordancia más corta $ subcadena $ {cadena ## subcadena} desde el comienzo de la variable $ cadena, elimine la más larga Subcadena haciendo coincidir $ substring $ {string% substring} Desde el final de la variable $ string, elimine la subcadena con la concordancia más corta $ substring $ {string %% substring} Desde el final de la variable $ string, elimine la subcadena que coincida con la más larga concordancia $ substring $ {string /substring /replacement} usa $ replacement en lugar del primer $ substring $ {string //substring /replacement} usa $ replacement en lugar de todos los $ substring $ {string /# substring /replacement} $ string prefix coincide con $ substring, luego se usa $ replacement en lugar de $ substring $ {string /% substring /replacement} si $ El sufijo de cadena coincide con $ substring, luego se usa $ replacement en lugar de $ substring coincidente

Descripción: " * $ substring " puede ser una expresión regular.


1. Longitud

[web97 @ salewell97 ~] $ test = 'Me encanta China' [web97 @ salewell97 ~] $ echo $ {# test} 12

$ {# Nombre de variable } Obtenga la longitud de la cadena


2. Intercepte la cadena

[chengmo @ localhost ~] $ test = 'Me encanta China' [chengmo @ localhost ~] $ echo $ {prueba: 5} e china [chengmo @ localhost ~] $ echo $ {prueba: 5: 10} e china

$ {nombre de variable: inicio: longitud} obtener subcadena


3.String deletion

[chengmo @ localhost ~] $ test = 'c: /windows/boot.ini' [chengmo @ localhost ~] $ echo $ {test # /}c:/windows/boot.ini[chengmo@localhost ~] $ echo $ {test # * /} windows /boot.ini [chengmo @ localhost ~] $ echo $ {test ## * /} boot.ini < Br>

[chengmo @ localhost ~] $ echo $ {prueba% /*} c: /windows [chengmo @ localhost ~] $ echo $ {prueba %% /*}

$ {nombre de variable #substring Expresión regular} Equipado con una subcadena desde el principio de la cadena para eliminar la expresión en la coincidencia.

$ {nombre de variable% subserie expresión regular} está equipada con una subcadena desde el final de la cadena para eliminar la expresión en la coincidencia.

Nota: $ {test ## * /}, $ {test% /*} es la forma más fácil de obtener el nombre del archivo o la dirección del directorio.

4.Cambio de cadena

[chengmo @ localhost ~] $ test = 'c: /windows/boot.ini' [chengmo @ localhost ~] $ echo $ {test /\\ //\\\\}c:\\windows/boot.ini[chengmo@localhost ~] $ echo $ {test //\\ //\\\\} c: \\ windows \\ boot.ini


$ {Variable /Buscar /Reemplazar valor} Uno " /" significa reemplazar el primero, " //" significa reemplazar todo, cuando aparece la búsqueda: " /" agregue el carácter de escape " \\ /" indica.

Tres, comparación de rendimiento

En la cáscara, a través de awk, sed, expr, etc. se puede lograr la operación de cadena anterior. A continuación realizamos una comparación de rendimiento.

[chengmo @ localhost ~] $ test = 'c: /windows/boot.ini' [chengmo @ localhost ~] $ tiempo para i en $ (seq 10000); haz a = $ {# prueba}; hecho;

real 0m0.173suser 0m0.139ssys 0m0.004s

[chengmo @ localhost ~] $ tiempo para i en $ (seq 10000); a = = (longitud expr $ Prueba); hecho;

real 0m9.734suser 0m1.628s


La diferencia de velocidad es cientos de veces, llamando al procesamiento de comandos externos, y el rendimiento del operador integrado es muy diferente. En la programación de shell, intente hacerlo con operadores o funciones incorporados. Usando awk, sed es similar a esto.

Copyright © Conocimiento de Windows All Rights Reserved