Vraag Verwijder coderegels uit meerdere bestanden


Ik run een webserver in een virtuele doos voor het testen van sommige projecten. En ik merkte dat sommige van de HTML-bestanden deze ongewenste regels bevatten. Ik wil dat deze regels code uit meerdere html / htm-bestanden worden verwijderd, dus ik deed het als volgt:

find /Desktop/TEST_REMOVAL3/ -name '*.html' -or -name '*.htm' -or -name '*.php' | sed -i "/<SCRIPT Language=VBScript>/,/ //--></SCRIPT><!-- /d"

Tot dusverre is het eerste deel waar als het ernaar uitziet / vindt alle html-bestanden werkt. Het gedeelte waar ik de regels moet verwijderen vanaf <SCRIPT Language=VBS> naar </SCRIPT> gebruik makend van sed mislukt: D

Ik zal proberen het weer uit te zoeken in afwachting van je suggesties en scheldend over waar ik fout ging: D


3
2018-04-22 18:18


oorsprong


Sluiten kiezers: deze vraag is niet off-topic! Vragen over shell scripting en bash zijn volmaakt prima hier zolang OP je Ubuntu draait. - Seth♦


antwoorden:


Als u de lijst met bestanden wilt gebruiken find als argumenten voor de sed commando (in plaats daarvan als imput, wat je regel doet), moet je ofwel de xargs opdracht:

find dir -name '*.html' | xargs -d \\n sed -i "COMMANDS"

In welk geval xargs neemt de bestandslijst met behulp van newline (\n) als scheidingsteken tussen bestandsnamen en start sed met hen als argumenten.

Of u gebruikt de -exec optie om te vinden:

find dir -name '*.html' -exec sed -i "COMMANDS" {} +

In welk geval find zal het commando uitvoeren tussen -exec en + tijdens het vervangen {} met (een lijst van) bestandsnamen. Er is ook

find dir -name '*.html' -exec sed -i "COMMANDS" {} \;

wat in wezen hetzelfde doet, maar een nieuw begint sed voor elke afzonderlijke bestandsnaam.


4
2018-04-22 18:58



Vereenvoudig ook je sed-statements en gebruik enkele aanhalingstekens, sed -i '/ VBScript /, / SCRIPT> / d', je hoeft niet de hele regel te matchen - Panther