Pregunta Cómo reemplazar globalmente cadenas en líneas NO comenzando con un cierto patrón


Quiero reemplazar globalmente el string foo con la barra de cadenas, usando sed. Esto solo debe hacerse para líneas que NO comienzan con la cadena ## Entrada.

No puedo conseguir que funcione. Intenté cosas como esta, pero llegué a un punto en el que no estoy seguro de si sé lo que estoy haciendo:

sed -i '/^##Input/ s/foo/bar/g' myfile

¡Por favor ayuda!


32
2018-02-10 05:34


origen


Respuestas:


Solo necesitas negar el partido usando !:

sed -i '/^##Input/! s/foo/bar/g' myfile

55
2018-02-10 05:48



Tienes que escapar # como en \#.


-4
2018-02-10 05:46



Una respuesta fea para una solicitud fea (es decir, obtienen lo que pidieron):

echo \{
for file in *.json; do
    sed -n '/^[\{\}]/! s/\([^\,]\)$/\1,/; /^[\{\}]/!p' $file
done
echo \{

-4
2017-08-01 16:40