Deshacerse de guiones en un archivo con sed


0

Me gustaría usar el comando sed para eliminar algunos guiones en una cadena (dentro de un archivo), es decir, el archivo tiene una línea que dice:

TEXT=abcdef-lalala-someText-yahoo

Después de la ejecución de sed, esa línea debería verse así:

TEXT=abcdeflalalasomeTextyahoo

Gracias por adelantado


-1 por no describir correctamente lo que estabas buscando.
barlop

Wilmer ha formulado razonablemente su pregunta. Tomado literalmente y considerando el idioma de un programador, está bastante claro lo que quiere. Él habla de "una" cadena y "esa" línea, pero no menciona ninguna o todas las líneas. Típicamente "foo", "abcdef", "lalala" significan datos variables; por lo tanto, puedo suponer que "TEXT =" y "yahoo" son constantes (a menos que él diga lo contrario). Originalmente era ambivalente acerca de "yahoo", pero desde las rebajas, me he reenfocado en la pregunta y debería ajustar mi respuesta, a pesar de que Wilmer fue lo suficientemente amable como para no quejarse de mi descuido.
Peter.

Respuestas:


1

Según su comentario adicional a la respuesta de Nifle , quizás esto se parezca más a lo que está buscando. Solo actuará en líneas que contengan TEXT=seguidos de 4 '-' segmentos de texto delimitados.

Usando GNU sed (tratando "TEXT" y "yahoo" como constante)

sed -re 's/^(TEXT=[^-]+)-([^-]+)-([^-]+)-(yahoo)$/\1\2\3\4/'

O, utilizando GNU sed (tratando todo el texto después de "=" como deseable)

sed -re 's/^(TEXT=[^-]+)-([^-]+)-([^-]+)-([^-]+)$/\1\2\3\4/'

O, para la portabilidad posix (tratando todo el texto después de "=" como deseable):

sed 's/^\(TEXT=[^-][^-]*\)-\([^-][^-]*\)-\([^-][^-]*\)-\([^-][^-]*\)$/\1\2\3\4/'

3

Aqui tienes:

echo "TEXT=abcdef-lalala-someText-yahoo" | sed 's/-//g'
TEXT=abcdeflalalasomeTextyahoo

1
sed -i 's/-//g' filenamees lo que realmente lo cambiaría en el archivo, sin embargo, eliminaría TODOS -en el archivo, lo que podría no ser lo que desea.
Rob

Aunque eso funciona, estaba pensando en una forma poco más sofisticada de digerirlo, por ejemplo: sed -i 's / TEXT = ......-......-........ -..... / wayToTellSedToLeaveOriginal6CharsWayToTellSedToLeaveOriginalSecond6CharsAndSoOn "7g 'nombre de archivo
Wilmer

0

Aquí están mis dos centavos ... Puedes agregar la coincidencia (TEXT =) antes del comando sustituto ... Así:

sed '/TEXT=/s/-//g'

Los resultados serán:

echo "TEXT=abcdef-lalala-someText-yahoo" | sed '/TEXT=/s/-//g'
TEXT=abcdeflalalasomeTextyahoo

El comando sustituto solo se ejecutará cuando coincida con la primera cláusula, en este caso, coincida con "TEXT =". Creo que el comando será más simple y más elegante.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.