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

Wilmer
fuente
-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/'
Peter.O
fuente
3

Aqui tienes:

echo "TEXT=abcdef-lalala-someText-yahoo" | sed 's/-//g'
TEXT=abcdeflalalasomeTextyahoo
Nifle
fuente
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.

usuario3681552
fuente