Du bist nicht angemeldet.

Werbeanzeige

DasBlub

Alter Hase

  • »DasBlub« ist der Autor dieses Themas

Beiträge: 803

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

1

11.03.2009, 12:10

[gelöst] "no newline at end of file"

so, wie der titel schon sagt, geht es um die zeilenumbrüche am dateiende.
ich bin auf der suche nach einem script / einer regexp, mit welcher ich automatisch bei allen dateien, bei welchen ein zeilenumbruch am schluss fehlt, einen zeilenumbruch hinzufügen kann.
dies brauche ich für c++ scripte welche ich auf windows entwickle, jedoch auch von anderen usern auf unix verwendet werden (gcc mekert ja rum wegen dem).

wäre super, wenn irgend wer von euch so n script hätte :)

erste ansätze haben ca. so ausgesehen (test.cpp war einfach eine datei mit dem inhalt 'asdf' ohne zeilenumbruch hinten^^):

Quellcode

1
2
3
if [ `cat test.cpp | tail -1 | grep '\n' | wc -l | sed 's/ //g'` -eq 0 ] ; then
    echo '' >> test.cpp
fi

die verschiedenen probleme je nach lösung (ich hab da mit dem grep pattern rumgespielt) waren:
- er fügt keinen zeilenumbruch hinzu
- er fügte immer einen zeilenumbruch hinzu (auch wenn schon einer da war)
- er fügte ihn nur hinzu, wenn es schon einen gab
- etc.

VuuRWerK

Frischling

Beiträge: 59

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

2

11.03.2009, 14:55

Ohne es jetzt testen zu können, probier mal folgenden Befehl zum testen auf die leere zeile am Dateiende:

Quellcode

1
2
3
if [ tail -1 test.cpp | grep '^[^\n]$' ] then
    echo '\n' >> test.cpp
fi


Beim RegExp bin ich mir jetzt nicht ganz sicher aber in die Richtung würde ich glaub versuchen zu arbeiten.

Gut Schuß
VuuRWerK ;)

DasBlub

Alter Hase

  • »DasBlub« ist der Autor dieses Themas

Beiträge: 803

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

3

11.03.2009, 15:26

dein script würde so nicht funktionieren, du darfst nicht befehle in der if-abfrage ausführen ( nur mit den`` und $() ).

aber so funktioniert es jetzt :D

Quellcode

1
2
3
4
tail -1 test.cpp | grep '^$'
if [ $? -ne 0 ] ; then
    echo >> test.cpp
fi

Fred

Supermoderator

Beiträge: 2 130

Beruf: Softwareentwickler

  • Private Nachricht senden

4

11.03.2009, 17:09

Hab's mal in ein passendes Forum verschoben ;)

VuuRWerK

Frischling

Beiträge: 59

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

5

12.03.2009, 10:19

Zitat von »"DasBlub"«

dein script würde so nicht funktionieren, du darfst nicht befehle in der if-abfrage ausführen ( nur mit den`` und $() ).


Ja das ist natürlich klar es sollte ja mehr als "Pseudocode" verstanden werden bzw wollte ich Dir nur einen anderen Weg mit grep vorschlagen, zudem hab ich es nur mal fix hier ins Forum getippt und nix getestet ;)

Aber wenn Du was gefunden hast wie es geht ist doch prima ;)

Gut Schuß
VuuRWerK ;)

DasBlub

Alter Hase

  • »DasBlub« ist der Autor dieses Themas

Beiträge: 803

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

6

12.03.2009, 11:24

so, hab mir jetzt mal dieses script damit gebastelt ;)

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
#/bin/sh

grepPattern=".cpp|.c|.h"

allFiles=`find $1 | egrep '$grepPattern'`

for file in $allFiles
do
  tail -1 $file | grep '^$'
  if [ $? -ne 0 ] ; then
    echo >> $file
  fi
done


einfach mit dem pfad als parameter aufrufen, der rekursiv durchsucht werden soll ;)

Werbeanzeige