![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| Konstigt beteende från script i crontab | PilotGoose | Shell-programmering och Skript | 1 | 06-26-2008 10:54 |
| Hjälp med min konstiga manus! | kdyzsa | Shell-programmering och Skript | 1 | 06-15-2008 11:39 |
| Konstiga sudo beteende | geomonap | UNIX för avancerade & Expertanvändare | 1 | 02-03-2006 05:08 |
| någon förklaring till detta shell script beteende | xiamin | Shell-programmering och Skript | 9 | 11-09-2001 01:13 |
| Konstiga script | Duckman | UNIX for Dummies Frågor & Svar | 2 | 03-14-2001 01:53 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
Konstiga sed beteende i skriptet
Jag har skrivit ett litet skript för att byta ut vissa ord i alla filer i en katalog. Kod:
#!/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 Nu, när jag kör det här scriptet som en normal användare, bara den första 4kB av ärendet har behandlats. Så alla filer som är större än 4kB halveras. De återstående bytes är precis utanför den nya filen. När jag körde skriptet som root, 8KB behandlades. Finns det något sätt att behandla hela filer? När jag katt en stor textfil hela fil får skrivas ut på min skärm. Tack på förhand. |
|
||||
|
Inte läsa och skriva till samma fil och med hjälp av katt med sed är överflödig, ersätta dessa rader: Kod:
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 med: Kod:
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" Om du sed version stödjer-i flaggan kan du redigera filen på plats utan att använda en temporär fil. Kod:
sed -i -e "s/login\//login.tst\//" -e "s/cyberkd\//cyberkd.tst\//" -e "s/\/db_connect.inc.php/\/testdb_connect.inc.php/" "$1" Hälsningar Senast redigerad av Franklin52; 08-30-2008 vid 08:52.. |