
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">
. -r
Ist 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 :)