![]() |
|
|
google unix.com
|
|||||||
| Foros | Registro | Reglas de los Foros | Enlaces | Álbumes | Preguntas más frecuentes | Lista de miembros | Calendario | Búsqueda | Puestos de hoy | Marcar Foros Como Leídos |
| Programación de scripts de shell y Plantear preguntas sobre KSH, CSH, SH, BASH, PERL, PHP, SED, AWK y otros scripts de shell y lenguajes de script de shell aquí. |
Más UNIX y Linux Foro Temas usted puede encontrar útiles
|
||||
| Hilo | Hilo para principiantes | Foro | Respuestas | Último mensaje |
| Comportamiento extraño de script en crontab | PilotGoose | Programación de scripts de shell y | 1 | 06-26-2008 10:54 AM |
| Ayuda con mi script raro! | kdyzsa | Programación de scripts de shell y | 1 | 06-15-2008 11:39 PM |
| Sudo extraño comportamiento | geomonap | UNIX para usuarios avanzados y expertos | 1 | 02-03-2006 05:08 PM |
| ninguna explicación para este comportamiento script de shell | xiamin | Programación de scripts de shell y | 9 | 11-09-2001 01:13 PM |
| Guión extraño | Duckman | UNIX for Dummies Preguntas y Respuestas | 2 | 03-14-2001 01:53 PM |
![]() |
|
|
Linkback vínculo | Herramientas de hilo | Buscar en este Hilo | Tasa de Hilo | Modos de visualización |
|
|
|
||||
|
Extraño comportamiento en la secuencia de comandos de sed
He escrito un pequeño script para sustituir determinadas palabras en todos los los archivos en un directorio. Código:
#!/bin/sh #Get list of files to be edited file_list=`ls -p` for i in $file_list do echo "Processing $i" alteredi=`echo "$i" | sed -e 's/\//d/'` if [ $i = $alteredi ] then if [ $i != "maketest" ] then #actual altering cat $i | sed -e "s/login\//login.tst\//" > $i cat $i | sed -e "s/cyberkd\//cyberkd.tst\//" > $i cat $i | sed -e "s/\/db_connect.inc.php/\/testdb_connect.inc.php/" > $i echo " $i has been altered" else echo " Not altering myself" fi else echo " Not altering directories" fi done Ahora, cuando ejecute este script como un usuario normal, sólo la primera de 4KB se procesa el archivo. Por lo tanto, todos los archivos de más de 4 KB se cortan a la mitad. El resto de octetos se acaba de dejar fuera del nuevo archivo. Cuando corría el script como root, 8KB fueron procesados. ¿Hay alguna forma de proceso de la totalidad de los archivos? Cuando un gato grande archivo de texto todo el archivo se imprimirá en mi pantalla. Gracias de antemano. |
|
||||
|
No leer y escribir en el mismo archivo y el uso de gatos con sed es redundante, reemplace estas líneas: Código:
cat $i | sed -e "s/login\//login.tst\//" > $i cat $i | sed -e "s/cyberkd\//cyberkd.tst\//" > $i cat $i | sed -e "s/\/db_connect.inc.php/\/testdb_connect.inc.php/" > $i con: Código:
sed -e "s/login\//login.tst\//" -e "s/cyberkd\//cyberkd.tst\//" -e "s/\/db_connect.inc.php/\/testdb_connect.inc.php/" "$1" > temp.file mv temp.file "$1" Si está sed versión-i apoya la bandera puede editar el archivo en su lugar sin utilizar un archivo temporal. Código:
sed -i -e "s/login\//login.tst\//" -e "s/cyberkd\//cyberkd.tst\//" -e "s/\/db_connect.inc.php/\/testdb_connect.inc.php/" "$1" Recuerdos Última edición por Franklin52; al 08-30-2008 08:52 AM.. |
|
||||
|
Gracias. ¡Funciona!
|
![]() |
| Marcadores |
| Etiquetas |
| gato, sed, depósito |
| Herramientas de hilo | Buscar en este Hilo |
| Modos de visualización | Vota a este hilo |
|
|