grep, um zu sehen, ob eine Zeile mit einer bestimmten Zeichenfolge endet

grep, um zu sehen, ob eine Zeile mit einer bestimmten Zeichenfolge endet

Hallo, ich habe eine Datei mit vielen Zeilen, die mit enden main.css">, und einige davon wiederholen sich.

Ich möchte nur eine Kopie dieser Zeilen behalten und die wiederholte Zeile löschen.

Kann ich mit grep suchen, ob eine Datei eine Zeile hat, die mit endet main.css">?

Bisher habe ich:

 grep ' main.css' file.txt |sort | uniq -u

Das passiert nicht wie erwartet, es gibt mir nur eine leere Ausgabe. Bitte helfen Sie mir? Das hat nicht

Antwort1

Du solltest benutzen:

grep -n 'main\.css">$' file.txt

$bezeichnet das Zeilenende, danach kann natürlich nichts mehr folgen.

Das hier brauchst du nicht *, da du das Muster innerhalb der Zeile suchst, alles davor wird automatisch ignoriert, wenn dein Muster gefunden wird. Das einzige, was du hier ausblenden musst, ist .das, was der einzige reguläre Ausdrucksoperator in ist main.css">. -rIst auch überflüssig, wenn du nur eine Datei angibst.

Antwort2

Sie könnten auch awk verwenden,

$ cat file
foo main.css">
ghj
brar main.css">

$ awk '/main\.css">$/{print NR}' file
1
3

Oder sed:

$ sed '/main\.css">$/=' file
1
3

Antwort3

Ich denke, Sie wollten auch andere Zeilen behalten, die nicht vorhanden sind, main.css>selbst wenn es sich dabei um Duplikate handelte:

Line 1
Line 2
Line 1
Line 2 main.css">
Line 2 main.css">
Line 3 
Line 3 main.css">
Line 4

So dass Sie nach dem Befehl Folgendes erhalten:

Line 1
Line 1
Line 2
Line 2 main.csv>
Line 3 
Line 3 main.csv>
Line 4

In diesem Fall sollte der folgende Befehl funktionieren: sort your_file | awk '!/main.css">$/;/main.css">$/,/main.css">$/{if($0!=p){print;p=$0}}'

Antwort4

sed  '/main.css/d' file.txt  > ~/Desktop/solution.txt

Das hat prima geklappt :)

verwandte Informationen