![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| UNIX for Dummies Frågor & Svar Om du inte är säker på var att skriva en UNIX eller Linux fråga efter det här. Alla UNIX-och Linux-nybörjare välkomna! |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| Ta bort vissa rader | catgovind | Shell-programmering och Skript | 3 | 04-30-2008 06:40 |
| Hur man läser ett särskilt avsnitt och ändra i | kn.naresh | Shell-programmering och Skript | 2 | 04-18-2008 01:30 |
| Skriva ut rader med särskilda awk NF | jehrome_rando | Shell-programmering och Skript | 1 | 03-13-2007 04:23 |
| tittar på specifika linjer | dakid | UNIX for Dummies Frågor & Svar | 3 | 05-25-2006 04:25 |
| Hur du specifika rader i en fil? | hedgehog001 | UNIX for Dummies Frågor & Svar | 2 | 08-23-2005 01:04 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
Hur du använder sed ändra specifika linjer
Kan någon berätta för mig hur jag kan använda sed att ändra riktning följande rader? filen är följande:
"TEST/SI1573.lab" 3670 8920 h # 8920 9530 hh 9530 10694 ih . "TEST/DR1/FAKS0/SI2203.lab" 9730 9580 h # 9580 9840 dh 9840 10652 ix 10652 11997 r ........ Jag vill ändra första fälten till 0 av de linjer som följer de linjer som började med "TEST. Filen efter operationen bör vara: "TEST/SI1573.lab" 0 8920 h # 8920 9530 hh 9530 10694 ih . "TEST/DR1/FAKS0/SI2203.lab" 0 9580 h # 9580 9840 dh 9840 10652 ix 10652 11997 r ........ kan någon tala om för min om hur man kan göra det? Tack på förhand. |
|
||||
|
Kod:
sed -e '/^"TEST/{p;N;s/.*\n[0-9]*/0/;}' filename
Det finns många olika versioner av sedSå din kanske inte förstår exakt samma dialekt som min. Detta ser ut för "test" (med ett öppnande av dubbla citattecken) i början av raden. Om hittades, det skrivs att linje (p) Och bifogar nästa rad att mönstret rymden (N). Detta medför mönstret utrymme att innehålla två rader; TEST linje och följande rad, åtskilda av en newline. Sedan den ersätter (s// /) Den första raden i mönstret utrymme, newline och varje nummer strax efter newline med ett noll. På den punkten är vi gjort, vad som finns kvar i mönstret rymden kommer att tryckas som vanligt. sed syntax är mycket knapphändig, om du inte har särskilda skäl att använda sed för detta, kanske en likvärdig awk eller Perl skriptet skulle vara mer maintainable (särskilt om du inte är väl förtrogen med sed). Senast redigerad av era; 05-18-2008 vid 06:46.. Motivering: Kanske föredrar awk eller Perl trots allt ...? |
|
||||
|
Kod:
awk '/^"TEST/ { t=1 ; print; next }
t==1 { $1 = "0"; t=0; }1' filename
Detta medför den rörliga t skall fastställas till 1 på följande rad efter provet linje. Om så är fallet, att ersätta de första området med noll, och ange t tillbaka till noll. Den sista 1 orsakar de linjer som når denna punkt i manus som ska skrivas ut. (Det är en kortform; standardåtgärden i awk är att skriva ut om villkoret är sant, och 1 som ett villkor är alltid sant.) |
|
||||
|
En av mina personliga favoriter är Kernighan & Pike's UNIX Programming Environment men det är mycket gamla, så några av de perifera detaljer har förändrats ganska mycket sedan dess. En annan perenn är Friedl's Mastering Regular Expressions, Men du kan kämpa med det första om du inte är bekant med de verktyg som den omfattar.
The O'Reilly sed & Awk Boken är en bra introduktion till sed och awk, men det finns många on-line handledningar som förmodligen är lika bra. I FAQ-delen har fler länkar; Jag är ny för Unix. Vilka böcker ska jag läsa? - The UNIX Forums |
![]() |
| Komihåglista |
| Taggar |
| regex, reguljära uttryck |
| Thread Tools | Sök i denna tråd |
| Visningslägen | Betygsätt denna tråd |
|
|