So löschen Sie eine Zeile, wenn sie nur aus einer Zeichenfolge besteht

So löschen Sie eine Zeile, wenn sie nur aus einer Zeichenfolge besteht

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

sedVerwendung $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 perlLö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

verwandte Informationen