![]() |
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.
|
|
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 |
| Radera rad i textfil | Berserk | UNIX for Dummies Frågor & Svar | 6 | 12-16-2008 03:44 |
| Ta bort linje med matchande text och linje omedelbart efter | orahi001 | UNIX for Dummies Frågor & Svar | 6 | 01-15-2008 12:34 |
| Ta bort första raden från någon textfil? | aungomarin | Shell-programmering och Skript | 5 | 05-16-2006 10:42 |
| ta bort en linje som grundar sig på första tecknet i linje | borncrazy | UNIX for Dummies Frågor & Svar | 2 | 12-06-2005 03:27 |
| ta bort sista raden från textfil | hcclnoodles | Shell-programmering och Skript | 4 | 06-25-2002 10:52 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
Ta bort texten från rad som börjar pattern1 upp till linjen innan pattern2?
Min data är xml'ish (här är ett utdrag): --
<bag name\u003d"mybag1" version\u003d"1.0"/> <contents id\u003d"coins"/> <bag name\u003d"mybag2" version\u003d"1.1"/> <contents id\u003d"clothes"/> <contents id\u003d"shoes"/> <bag name\u003d"mybag3" version\u003d"1.6"/> Jag vill ta bort raden med mybag2 och dess innehåll (antal innehåll linjer kan variera). Så jag vill ta bort från mönstret mybag2 upp till (men inte) nästa "påsen namn" tag och resultera i: -- <bag name\u003d"mybag1" version\u003d"1.0"/> <contents id\u003d"coins"/> <bag name\u003d"mybag3" version\u003d"1.6"/> Jag har försökt detta ett par olika sätt med sed och awk och har ännu inte hittat en lösning. Någon hjälp skulle uppskattas. |
|
||||
|
Detta är min lösning:
--------- file: awk_tets -------------- BEGIN (flagga \u003d 0) / ^ <väska name \u003d "mybag2" / (flagga \u003d 1) / ^ <väska name \u003d "mybag3" / (flagga \u003d 0) (If (flag \u003d\u003d 0) (print;)) --------------------------------------- på kommandoraden: $ awk-f awk_test your_data_file> resultat Let's try it ![]() |
|
||||
|
Citat:
|
|
||||
|
Jag försökte att lösningen: --
me @ MyServer $ nawk 'BEGIN (flagga \u003d 0) / ^ <väska name \u003d "mybag2" / (flagga \u003d 1) / ^ <väska name \u003d "mybag3" / (flagga \u003d 0) (if (flag \u003d\u003d 0) (print;)) 'test2 <bag name\u003d"mybag1" version\u003d"1.0"/> <contents id\u003d"coins"/> <bag name\u003d"mybag3" version\u003d"1.6"/> Det fungerar, men problemet är att den andra påsen namnet kan vara valfritt värde, dess inte specifikt "mybag3", så den andra mönstret måste vara mer allmänna "/ ^ väska name \u003d / Så jag försökte med det också: -- me @ MyServer $ nawk 'BEGIN (flagga \u003d 0) / ^ <påse name \u003d "mybag2" / (flagga \u003d 1) / ^ <påse name \u003d / (flagga \u003d 0) (if (flag \u003d\u003d 0) (print; )) 'test2 <bag name\u003d"mybag1" version\u003d"1.0"/> <contents id\u003d"coins"/> <bag name\u003d"mybag2" version\u003d"1.1"/> <contents id\u003d"clothes"/> <contents id\u003d"shoes"/> <bag name\u003d"mybag3" version\u003d"1.6"/> Det misslyckades eftersom flaggan återställs direkt efter det bildades som mer allmänna mönstret också matchade mybag2 linjen. Sedan bytte jag mönstret ordning och BINGO! me @ MyServer $ nawk 'BEGIN (flagga \u003d 0) / ^ <påse name \u003d / (flagga \u003d 0) / ^ <påse name \u003d "mybag2" / (flagga \u003d 1) (if (flag \u003d\u003d 0) (print; )) 'test2 <väska name \u003d "mybag1" version \u003d "1.0" /> <contents id\u003d"coins"/> <bag name\u003d"mybag3" version\u003d"1.6"/> Tack så mycket för att leda mig i rätt riktning kholostoi |
![]() |
| Komihåglista |
| Taggar |
| sed radera linje, Solaris |
| Thread Tools | Sök i denna tråd |
| Visningslägen | Betygsätt denna tråd |
|
|