Eliminar cadena en linux

Nucklear

Buenas, el caso es que tengo un monton de alrchivos en los que necesito eliminar la palabra -Werror.

Tengo el siguiente script:

#!/bin/bash

RUTA=`pwd`
echo $RUTA

FILES=`grep -rl Werror $RUTA`

for x in $FILES
  do
    [AQUI NECESITO BORRAR LA CADENA "-Werror"]
  done
 

El problema es que sed no me funciona al tener el guion ( - ) y con awk me pasa lo mismo.
¿Alguna idea?

Nucklear

Por cierto, no controlo mucho de regex, y creo que es lo que se debería usar en el sed para detectar el caracter ( - ).

He probado con:

sed '/\-Werror/d' $x

Pero en ejecución me va abriendo los archivos como si hiciese un "cat" y no los edita...

Nucklear

EDIT: Ya está, el problema es que sed pide obligatoriamente el nombre del archivo destino y antes editaba pero no guardaba, cosa que yo interpreté mal. Al final quedó asi:

#!/bin/bash

RUTA=`pwd`
echo $RUTA

FILES=`grep -rl Werror $RUTA`

for x in $FILES
  do
    sed '/\-Werror/d' $x > $x
  done
Thanat0s

Aporto otra solución bastante simple para aplicar en un conjunto de archivos en una sola línea de comando.

find . -name "*.cc" -o -name "*.h" -o -name "*.hh" | xargs perl -pi -e 'Aquí la expresión regular'

Usuarios habituales

  • Thanat0s
  • Nucklear