Oneliner för att hitta PHP-filer som slutar med blank rad

Ofta när man arbetar med PHP i större projekt eller ramverk så är det viktigt att hur koden ser ut innan och efter PHP start- respektiver slut-tag, alltså:

<?php ... PHP kod ... ?>

Om det t.ex. finns text eller ett enter-tecken innan start-taggen eller efter slut-taggen så kommer det tolkas som ren HTML-kod och skrivas ut på webbsidan.

Jag satt t.ex. idag med ett stort PHP-projekt (vtiger CRM-system) där det smet in ett extra enter-tecken när man exporterar till iCal. Följden blir att den exporterade iCal-filen inte känns igen som en riktig kalender. Någon av de 6674 filerna har alltså ett enter-tecken efter slut-taggen. Frågan är bara vilken?

För att lösa problemet så drog jag ihop en ”one-liner” som söker igenom alla filer och underkataloger och skriver ut de filer som har en blank sista rad.

find . -type f | xargs -i echo "[ -z "`tail -n 1 {}`" ] && echo {} got trailing LF" | bash

Skulle man behöva leta efter filer som börjar med en tom rad så kan du använda:

find . -type f | xargs -i echo "[ -z "`head -n 1 {}`" ] && echo {} got starting LF" | bash

Vips! Det visade sig (inte helt otippat) att config.inc.php var boven.
Om man är lat och inte vill editera filen själva kan man alltid slänga in den här:

sed -i filnamn -e :a -e '/^
*$/{$d;N;ba' -e '}'

Byt ut filenamn mot filen du vill ta bort den blanka raden på.