Linux encuentra y reemplaza en todos los archivos

  
        

A menudo es el caso encontrar todos los archivos en un directorio que contienen una cadena y reemplazar la cadena en esos archivos con otra cadena. En este caso, la red tiene que revisar muchos archivos, es demasiado problema revisarlos y reemplazarlos uno por uno. En este momento, deberíamos encontrar una manera de resolver el problema con un solo comando.

1, comando grep

El comportamiento predeterminado del comando grep pattern file.txt es dar salida a la línea que coincide con el patrón en el archivo file.txt a la salida estándar. Esta función nos ayuda a encontrar el contexto en el que aparece una cadena en el archivo, pero no nos ayuda a implementar la siguiente operación compleja, por lo que es necesario tener un poco de comprensión de algunas de las opciones de grep.

El contenido del archivo de prueba ahora es el siguiente:

 $ cat target.txt < a class = " navbar-brand " href = " http: //yyy.xxx.edu.cn /" > Panda Search < /a > text-decoration: none; " href = " http: //www.asdf.net/scholar/xindong_wu.html" > Xindong " href = " http: //asdf.net/scholar/Federi < a class = " navbar-brand " href = " http: //yyy.xxx.edu.cn/" > Panda Search < /a > href = " http : //www.asdf.net/scholar/Gong-Qing_Wu.html" > href = " http: //asdf.net/scholar/Federico_Bocardi.html" > Federico occardi < /a > < /li > < span class = " espacio convertido de Apple " > < /span > < li style = " display: inline-block; padding-right: 5px; padding-left: 5px; < <; a style = " color: rgb (66, 139 Para probar, copiaremos este archivo, copiaremos dos copias, le cambiaremos el nombre y lo pondremos en la siguiente estructura de directorio: 
 $ tree ..├── a│ └ ── target1.txt├── target2.txt└── target.txt 

execute gr Comando ep:

 $ grep -rn http: //yyy.xxx.edu.cn" * a /target1.txt: 1: < a class = " navbar-brand " href = " http: //yyy.xxx.edu.cn/" > Panda Search < /a > a /target1.txt: 5: < a class = " navbar-brand " href = " http: //Yyy.xxx.edu.cn/">Panda Search < /a > target2.txt: 1: < a class = " navbar-brand " href = " http: //yyy.xxx.edu.cn /" > Panda Search < /a > target2.txt: 5: < a class = " navbar-brand " href = " http: //yyy.xxx.edu.cn/" > Panda Search <; /a > target.txt: 1: < a class = " navbar-brand " href = " http: //yyy.xxx.edu.cn/" > Panda Search < /a > target.txt : 5: < a class = " navbar-brand " href = " http: //yyy.xxx.edu.cn/" > Panda Search < /a > grep brinda las siguientes opciones: * es normal Bash comodín, que significa todos los archivos en el directorio actual. Por supuesto, también puede escribir un nombre de archivo -r es una búsqueda recursiva, lo que significa que también se encuentra el archivo en el subdirectorio del directorio actual. El número de línea -i ignora el caso -l lista el nombre del archivo coincidente -L lista el nombre del archivo no coincidente -w coincide solo con la palabra completa, no forma parte de la cadena (como solo la coincidencia con ‘ man ’, incluyendo ambos lados de man Firmado como ‘ .man. &Rsquo;, o ‘ = man = ’ sin incluir ‘ woman ’ o ‘ manly ’) 

2, Linux otras habilidades preparatorias 2.1 contarán con el resultado Hay muchas formas de parametrizar, aquí hay dos tipos: `` y $ (). Aquí hay un ejemplo.

 $ echo `ls`a target2.txt target.txt t.tt $ echo $ (ls) a target2.txt target.txt t.tt2.2 Reemplazo del archivo sed sed comando use consulte el artículo anterior Aquí, solo uso el lugar: 
 sed -i " s /old /new /g " file1.txt file2.txt Puedes reemplazar todo lo antiguo en el archivo * .txt con new. Si lo nuevo no tiene nada, significa borrar lo viejo. 3, las habilidades anteriores están unidas entre sí, solo unas pocas líneas, puede completar todos los archivos, especificar el reemplazo de varias cadenas. Por supuesto, también preste atención al uso del comando sed, cuando tenga el carácter '/', debe prestar atención al escape, de la siguiente manera: 
 $ sed -i " s /http: \\ /\\ /yyy.xxx. Edu.cn//g" $ (grep -lr " http: //yyy.xxx.edu.cn" *) $ cat target.txt < a class = " navbar-brand " href = " /quot; > Panda Search < /a > text-decoration: none; " href = " http: //www.asdf.net/scholar/xindong_wu.html" > Xindong " href = " http: //asdf .net /scholar /Federi < a class = " navbar-brand " href = " /" > Panda Search < /a > href = " http: //www.asdf.net/scholar/Gong- Qing_Wu.html " > href = " http: //asdf.net/scholar/Federico_Bocardi.html" > Federico occardi < /a > < /li > < span class = " > < /span > < li style = " display: inline-block; padding-right: 5px; padding-left: 5px; > < a style = " color: rgb (66, 139 $ sed -i " s /http: \\ /\\ /www.asdf.net//g" $ (grep -lr " http: //www.asdf.net" *) $ sed - i " s /http: \\ /\\ /asdf.net//g" $ (grep -lr " http: //asdf.net" *) $ cat target.txt < a class = " navbar-brand " href = " /" > Panda Search < /a > text-decoration: none; " href = " /scholar/xindong_wu.html" > Xindong " href = " /scholar /Federi < a Class = " navbar-brand " href = " /" > Panda Search < /a > href = " /scholar/Gong-Qing_Wu.html" gt; href = " /scholar/Federico_Bocardi.html; Federico occardi < /a > < /li > < span class = " Espacio convertido a Apple " > < /span > < li style = " display: inline block; padding-right: 5px; padding-left: 5px; " > < a style = " color: rgb (66, 139 $ Mira aquí, quizás también entiendas lo que voy a hacer. De hecho, este es el caso. Un zapato para niños agrega varias páginas web estáticas a nuestro sistema en línea. Los hipervínculos utilizados en las páginas web se copian directamente desde el navegador, incluidos los saltos en la estación. Obviamente, esto no es científico, aunque no hubo ningún problema en ese momento, pero ahora nuestro nombre de dominio debe cambiarse, el problema viene y no se puede acceder a los enlaces de salto de estos antiguos nombres de dominio. Para solucionar este problema, decidí eliminar todos los nombres de dominio en estas estaciones y puedo lograr un salto normal. Debido a demasiados archivos, tuve que usar el método anterior.
						
Copyright © Conocimiento de Windows All Rights Reserved