Pregunta

Estoy escribiendo un script de shell (bash) y estoy tratando de averiguar una manera fácil de realizar una tarea sencilla.

Tengo un poco de cadena en una variable. No sé si esto es relevante, pero puede contener espacios, saltos de línea, porque en realidad esta cadena es el contenido de un archivo de texto conjunto.

Quiero sustituir la última ocurrencia de una determinada subcadena con otra cosa. Tal vez podría utilizar una expresión regular para eso, pero hay dos momentos que me confunden:

  • necesito asociar desde el extremo, no desde el inicio
  • la subcadena que quiero explorar en busca es fijo, no variable.
¿Fue útil?

Solución

  • para truncar al comienzo: ${var#pattern}
  • truncar en el extremo ${var%pattern}
  • ${var/pattern/repl} para el reemplazo en general

son los patrones de expansión estilo 'nombre', y el último puede tener el prefijo # o % a coincidir sólo al comienzo o al final (respectivamente)

todo está en el (largo) página de manual de bash. comprobar el capítulo "La expansión de parámetros".

Otros consejos

expresión AMN como esto

s/match string here$/new string/

debe hacer el truco - s es para sustitute, / romper el comando, y el $ es el fin de línea. Usted puede intentar esto en vi para ver si hace lo que necesita.

Me gustaría ver las páginas man para awk o sed.

La respuesta de Javier es la cáscara específica y no funcionará en todas las conchas.

Las respuestas sed que MrTelly y epochwolf aludidas son incompletas y debería ser algo como esto:

MyString="stuff ttto be edittted"
NewString=`echo $MyString | sed -e 's/\(.*\)ttt\(.*\)/\1xxx\2/'`

La razón de que esto funciona sin tener que utilizar el $ para marcar el final es que la primera '*' es codicioso y tratará de reunir lo más posible al tiempo que permite que el resto de la expresión regular para ser verdad.

Este comando sed debería funcionar bien en cualquier contexto shell usada.

Por lo general, cuando me quedé con Sed utilizo esta página

http://sed.sourceforge.net/sed1line.txt

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top