
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;}' file
ist gut genug, aber es wird Ihnen nur diese Ausgabe angezeigt. Wenn Sie die Datei ändern möchten und Ihre sed
die GNU ist sed
, können Sie verwenden sed -i '3{/^$/d}' file
(für GNU kann sed
das ;
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).
sed
Verwenden Sie unter FreeBSD/OS/X sed -i '' '3{/^$/d;}' file
.