Shell-script - kopieer tekst van het ene naar het andere bestand
Kwestie
Ik moet tekst kopiëren tussen een begin- en een eindpatroon van het ene bestand naar het andere.
Bijvoorbeeld,
Laten we zeggen dat ik een bestand heb met de volgende inhoud:
hallo wereld1 hallo wereld2 hallo wereld3 hallo wereld4 hallo world5 piep
Ik heb een shellscript nodig dat het volgende bestand kan produceren:
hallo wereld2 hallo wereld3 hallo wereld4 hallo world5 piep
Ik ken de regelnummers niet voor het bereik dat ik wil kopiëren, ik wil alleen het voorkomen van 'hallo wereld2' kopiëren naar het voorkomen van 'hallo wereld5' + 1 regel
Als je je afvraagt wat ik hier probeer te doen, wil ik een threaddump op mijn machine uitvoeren met kill -3, maar de uitvoer hiervan gaat naar de standaarduitvoer die in mijn geval naar het jboss out-bestand met een veel andere logs erin. Dus ik wil dit script uitvoeren om de thread te dumpen naar een apart bestand zodra de kill is uitgevoerd. Onnodig te zeggen dat er misschien meer dan één thread dump in het jboss.out bestand is.
Oplossing
De eenvoudigste manier, als uw invoerbestand op /folder/somefile.txt staat,
# Script lines.txt # Lees het invoerbestand in een stringvariabele. var str input; cat "/folder/somefile.txt"> $ input # Verwijder alles voor "hallo wereld2". stex "] ^ hello world2 ^" $ input> null # Alles verwijderen na "hallo world5n". stex "^ hello world5n ^ [" $ input> null # $ invoer heeft nu alleen het gewenste deel. Print het. echo $ invoer
TheScript is in biterscripting (//www.biterscripting.com). Om te proberen, sla het script op als /Scripts/lines.txt, start biterscripting en voer de volgende opdracht in.
script lines.txt
Script kan ook rechtstreeks vanuit een ander programma of een andere shell worden gebeld, zoals
/biterScripting/biterScripting.exe lines.txt
Zorg ervoor dat u de juiste bestandslocatie gebruikt in plaats van /folder/somefile.txt. Let op de dubbele aanhalingstekens, ^, [en] in de syntaxis van de syntaxis van de stringtrekker. Voel je vrij om het script naar een andere taal te vertalen.
Notitie
Dank aan SenHu voor deze tip op het forum.