GNU/Linux >> Tutoriales Linux >  >> Linux

Usando grep y sed para encontrar y reemplazar una cadena

Puedes usar find y -exec directamente en sed en lugar de localizar primero oldstr con grep . Es quizás un poco menos eficiente, pero eso podría no ser importante. De esta forma, el sed el reemplazo se ejecuta sobre todos los archivos enumerados por find , pero si oldstr no está allí, obviamente no funcionará en él.

find /path -type f -exec sed -i 's/oldstr/newstr/g' {} \;

Tu solución está bien. solo inténtalo de esta manera:

files=$(grep -rl oldstr path) && echo $files | xargs sed....

así que ejecuta el xargs solo cuando grep devuelve 0 , p.ej. cuando se encuentra la cadena en algunos archivos.


Tomé la idea de Vlad y la cambié un poco. En lugar de

grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g' /dev/null

Que produce

sed: couldn't edit /dev/null: not a regular file

Estoy haciendo en 3 conexiones diferentes al servidor remoto

touch deleteme
grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g' ./deleteme
rm deleteme

Aunque esto es menos elegante y requiere 2 conexiones más al servidor (tal vez haya una forma de hacerlo todo en una sola línea), también hace el trabajo de manera eficiente


Linux
  1. Uso de sed para buscar y reemplazar archivos de texto en Linux

  2. ¿Usando 'sed' para buscar y reemplazar?

  3. Buscar y reemplazar con sed en directorios y subdirectorios

  4. Buscar y reemplazar en secuencias de comandos de shell

  5. Encuentre y reemplace texto en un archivo entre un rango de líneas usando sed

Cómo encontrar una cadena en un archivo en Linux

Cómo usar el comando SED para buscar y reemplazar cadenas en archivos

Cómo buscar y reemplazar texto, palabra o cadena en un archivo

Encuentra texto en archivos en Linux usando grep

Tutorial de Unix Sed:busque y reemplace texto dentro de un archivo usando RegEx

Cómo usar Sed para buscar y reemplazar una cadena en un archivo