Zeile mit 1 Wort loeschen

06/12/2012 - 10:10 von Helmut | Report spam
Hallo alle miteinander,

ich habe hier eine Datei, in der (neben anderen Zeilen) mögliche Zeilen

# localhost
aa bb localhost ff

localhost
http_access localhost


vorkommen können. Einzig die Zeile mit dem einzigen Wort "localhost"
muss gelöscht oder auskommentiert werden, und mir fàllt dazu (noch)
keine elegante Lösung ein.

Bisher neige ich zu "grep 'localhost' | wc -w"
(mit etwas mehr Umfeld). Unfein ...

Was wàre eine elegante Lösung?

Viele Gruesse
Helmut

"Ubuntu" - an African word, meaning "Slackware is too hard for me".
 

Lesen sie die antworten

#1 Helmut
06/12/2012 - 11:30 | Warnen spam
Hallo, Juergen,

Du meintest am 06.12.12:

ich habe hier eine Datei, in der (neben anderen Zeilen) mögliche
Zeilen

# localhost
aa bb localhost ff

localhost
http_access localhost


vorkommen können. Einzig die Zeile mit dem einzigen Wort "localhost"
muss gelöscht oder auskommentiert werden, und mir fàllt dazu (noch)
keine elegante Lösung ein.

Bisher neige ich zu "grep 'localhost' | wc -w"
(mit etwas mehr Umfeld). Unfein ...

Was wàre eine elegante Lösung?



Ich wuerde es mit sed versuchen:

sed -n -e '/[[:print:]][[:space:]][[:print:]]/p'




Zeigt hier alle Zeilen an, in denen "localhost" vorkommt, nicht einzig
die, in der nur das eine Wort auftaucht.

Wirkt genauso wie

sed -n -e '/localhost/p'

es kommt aber auch darauf an, wie du
denn mit der Unterscheidung "nur ein Wort in der Zeile" und "mehrere
Worte in der Zeile" wirklich meinst (nein, so trivial ist das, in
Abhaengigkeit von den locale-Einstellungen, nicht unbedingt).



Im speziellen Fall: ich muss einzig die (eine) Zeile erwischen, in der
(neben "white space") nur das eine Wort "localhost" steht. Um diese
Zeile dann zu löschen oder auszukommentieren.

Derzeitige Brechstangenlösung (potthàsslich):

#! /bin/bash

Datei=meinedefekteDatei

Tmp=${Datei}$$
cp -a $Datei $Tmp
$Datei



while read Zeile
do
# echo "$Zeile" | grep -w localhost | wc -w
test $(echo "$Zeile" | grep -w localhost | wc -w) -eq 1 && continue
echo "$Zeile" >> $Datei
done < $Tmp
rm -f $Tmp
#


Viele Gruesse
Helmut

"Ubuntu" - an African word, meaning "Slackware is too hard for me".

Ähnliche fragen