Genau eine Zeile in einer Datei entfernen

Genau eine Zeile in einer Datei entfernen

Ich habe eine Datei, die die folgenden Zeilen enthält:

SUKsoft:
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

Wie kann ich die Zeile „SUKsoft:“ entfernen?

Diese Zeile kann an einer beliebigen Stelle in der Datei stehen (am Anfang, wie sie jetzt ist, oder in der Mitte).

Gibt es einen Befehl, um dies zu tun?

Antwort1

Zuentfernendie Liniennutzung

sed -i '/SUKsoft:\s*$/d' your_file 

Beispiel

% cat foo
SUKsoft: 
SUKsoft: App-Conduct_Risk_Comment   
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

% sed -i '/SUKsoft:\s*$/d' foo

% cat foo                    
SUKsoft: App-Conduct_Risk_Comment   
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

Antwort2

So entfernen Sie die gewünschte Zeile:

$ sed 's/SUKsoft: *$//' file.txt

SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

Ich gehe davon aus, dass es file.txtdie Zeilen enthält.

Oder,

$ sed 's/SUKsoft: *$//; /^$/d' file.txt
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

es hinterlässt keineleerLinie.

Zum Bearbeiten der Datei können Sie Folgendes verwenden:

sed -i 's/SUKsoft: *$//' file.txt

oder

sed -i 's/SUKsoft: *$//; /^$/d' file.txt

ganz nach Bedarf.

SehenAB's Antwort, wo es kompakter gemacht wird. Dank anWildcard.

Antwort3

grepsucht nach Zeilen, die einem Muster entsprechen. grep -v RückwürfeZeilen, die einem Muster entsprechen.

grep -v '^SUKsoft: *$'

Das Muster ist: Zeilen, die ^mit () beginnen SUKsoft:, möglicherweise gefolgt von Leerzeichen, aber sonst nichts bis zum Ende der Zeile ( $).

Antwort4

Gemessen an Ihrerposte die RohquelleNach „SUKsoft:“ steht kein Leerzeichen bzw. keine Leerzeichenfolge. Sicherheitshalber wird dieser Befehl diese jedoch berücksichtigen, falls sie vorhanden sind.

Mit Perl:

perl -ne '!/^SUKsoft: *$/&&print' input
  • !/^SUKsoft:$/&&print: Wenn die aktuelle Zeile nicht mit dem Muster übereinstimmt ^SUKsoft: *$, das mit einer Zeile übereinstimmt, die mit einer SUKsoft:Zeichenfolge beginnt, gefolgt von null oder mehr Leerzeichen, wird die Zeile gedruckt;
% cat input
SUKsoft:
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW
% perl -ne 'print unless /^SUKsoft: *$/' input
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

verwandte Informationen