Wie kann ich sed oder etwas anderes verwenden, um eine Zeile nur dann zu löschen, wenn die gesuchte Zeichenfolge das Einzige in der Zeile ist?
Beispielausgabe:
device-address-binding: ?
database-revision: 20
-- Found 198 Objects
},
{
object-identifier: (Analog Input, 1)
object-type: ({ Analog Input },)
object-name: "CA-1 T EXT"
descrip
Ich muss die Zeilen löschen, die " }" enthalten, aber nur die Zeilen, die sonst nichts enthalten. Wenn ich sed verwende, um eine Zeile mit " }" abzugleichen und zu löschen, wird in der Ausgabe darüber auch die Zeile "object-type" gelöscht.
Es wäre schön, nach „},/n“ zu suchen, aber wir wissen alle, dass sed so nicht funktioniert.
Vielen Dank für Ihre Hilfe.
Antwort1
Kein Bedarf für sed
:
grep -vx }, file
Oder um Leerzeichen zuzulassen:
grep -vx '[[:blank:]]*},[[:blank:]]*' file
Antwort2
sed
Verwendung $
für das Zeilenende:
sed '/^},$/ d'
^
bedeutet den Zeilenanfang. Möglicherweise müssen Sie auch einige Leerzeichen um tolerieren },
.
sed '/^[[:space:]]*},[[:space:]]*$/ d'
Antwort3
sed '/^[[:blank:]]*},[[:blank:]]*$/d' file
Antwort4
Sie können es auf viele Arten tun, hier ist eine perl
Lösung:
$ perl -ple 's#^\s*},\s*##' file
device-address-binding: ?
database-revision: 20
-- Found 198 Objects
{
object-identifier: (Analog Input, 1)
object-type: ({ Analog Input },)
object-name: "CA-1 T EXT"
descrip