2012-05-17 26 views
5

Por ejemplo, tengo una cadena: [email protected].Separar una cadena con la fiesta con el símbolo

que necesita para obtener la parte test2 de esta cadena. ¿Cómo puedo hacer esto con bash?

+1

posible duplicado de [la manipulación de cadenas en Bash. . . Extracción sección delantera] (http://stackoverflow.com/questions/2680274/string-manipulation-in-bash-removing-leading-section) – Kaz

Respuesta

19

Usando Parameter Expansion:

str='[email protected]' 
echo "${str#*@}" 
  1. El carácter # dice Retire el más pequeño prefijo de la expansión coincida con el patrón.
  2. El carácter % significa Elimine el sufijo más pequeño de la expansión que coincida con el patrón. (Así que usted puede hacer para conseguir "${str%@*}" la parte "test1".)
  3. El carácter / significa Retire la subcadena más pequeño y el primero de la expansión que coincida con el siguiente patrón. Bash lo tiene, pero no es POSIX.

Si duplica el carácter del patrón, lo compara con avidez.

  1. ## medios Eliminar la mayor prefijo de la expansión que coincida con el patrón.
  2. %% medios Eliminar la mayor sufijo de la expansión que coincida con el patrón.
  3. // medios Eliminar todas las subcadenas de la expansión que coincida con el patrón.
+0

¿Cómo cambio esto para imprimir test1 en lugar de test2? –

+0

@ChrisF He ampliado mi respuesta para mostrar cómo hacerlo. – kojiro

3
echo "[email protected]" | sed 's/.*@//' 
+2

O, en bash, 'xxx = "test1 @ test2"; sed 's/.*@//' <<< $ x'. –

+0

@JonathanLeffler Sé lo que quieres decir aquí, pero ¿no te faltan algunos 'x'es? – kojiro

+0

Hmm ... sí, parece que 'dos ​​equis' escapó. Es un poco tarde para editar el comentario ... –

Cuestiones relacionadas