Wie lösche ich eine Zeile nur, wenn sie sich an der angegebenen Zeilennummer befindet und dem Muster entspricht?

Wie lösche ich eine Zeile nur, wenn sie sich an der angegebenen Zeilennummer befindet und dem Muster entspricht?

Wie lösche ich eine Zeile nur, wenn sie sich an einer angegebenen Zeilennummer befindet und dem Muster entspricht?


Zum Beispiel:

  • Ich möchtelöschen( d);
  • DiedritteLinie ( 3);
  • wenn esleer( ^$);

Die folgende Syntax:

cat file | sed '3 /^$/d'

Gibt den folgenden Fehler zurück:

sed: -e expression #1, char 3: unknown command: `/'

Antwort1

Versuchen Sie Folgendes:

sed '3{/^$/d;}' file

Beachten Sie die Klammern.

Antwort2

Wie user000001 geantwortet hat, sed '3{/^$/d;}' fileist gut genug, aber es wird Ihnen nur diese Ausgabe angezeigt. Wenn Sie die Datei ändern möchten und Ihre seddie GNU ist sed, können Sie verwenden sed -i '3{/^$/d}' file(für GNU kann seddas ;Vorher hier auch weggelassen werden).}

`-i[SUFFIX]'
`--in-place[=SUFFIX]'
     This option specifies that files are to be edited in-place.  GNU
     `sed' does this by creating a temporary file and sending output to
     this file rather than to the standard output.(1).

sedVerwenden Sie unter FreeBSD/OS/X sed -i '' '3{/^$/d;}' file.

verwandte Informationen