Hier ist das Problem: ich habe ~ 35k-Dateien, die möglicherweise oder nicht ein enthalten könnten oder mehrere der Strings in einer Liste von 300 Zeilen jeweils einen regulären Ausdruck enthältVerwendung von Grep + Sed basierend auf einer Musterdatei?
wenn ich grep -rnwl 'C:\out\' --include=*.txt -E --file='comp.log'
ich sehe, gibt es ein paar Tausende von Dateien, die enthält eine Übereinstimmung.
jetzt wie bekomme ich sed, um jede Zeile in diesen Dateien zu löschen, die die Zeichenketten in comp.log zuvor verwendet?
edit: comp.log enthält eine einfache regex in jeder Zeile, aber zum größten Teil jeder Saite abgestimmt werden ist einzigartig
dies ist ein Beispiel dafür, wie es strukturiert ist:
server[0-9]\/files\/bobba fett.stw
[a-z]+ mochaccino
[2-9] CheeseCakes
...
usw. alberne Beispiele beiseite, es geht zu zeigen, dass jede Zeile einzigartig ist, abgesehen von ein paar Variationen, so sollte es nicht beeinflussen, was ich wirklich will: sehen, ob irgendwelche dieser Zeilen mit den Zeilen in der Datei an arbeiten. Es ist nicht anders als 's/pattern/replacement /', außer dass ich die Muster in der Datei anstelle von Inline verwenden möchte.
hier Ok ein Update (SO stationären bekommt, wenn ich die Frage nach ein paar Tagen beantwortet nicht erklären) nach viel Hantieren mit dem @ Kenavoz/@ Fischer Ansatz, fand ich eine ganz andere Lösung, aber das wichtigste zuerst. Erstellen einer modifizierten Musterliste für sed mit arbeiten funktioniert arbeiten.
sowie @ werkritter Ansatz von sed insgesamt ablegen. (diesen finde ich am meisten ... äh ... "am wenigsten gewunden" um das Problem herum).
ich nicht @ Mklement Antwort Arbeit unter Windows/Cygwin machen konnte (es tat unter ubuntu auf Arbeit, also ... nicht sicher, was das bedeutet. Zahlen.)
Was das Problem in eine Lösung endete mehr ... langfristige, wiederverwendbare Form war ein wunderbares Programm von einem Kollegen namens PowerGrep. es weht wirklich jede andere Option aus dem Wasser. Leider ist es nur Windows und es ist nicht kostenlos. (nicht einmal Werbung hier, das Ding ist nicht billig, aber es löst das Problem).
Wenn man bedenkt, dass die Antwort @Werkiters keine "richtige" Antwort war und ich nicht nur @Lars Fischer und @ Kenavoz 'Antwort als Lösung wählen kann (sie ergänzen sich), belohne ich @Kenavoz das Häkchen dafür zuerst.
abschließende Gedanken: Ich hatte auf eine einfachere, universelle und freie Lösung gehofft, aber anscheinend gibt es nicht.
ersetzen funktioniert Was ist ' 'C: \ out \ ''? Sind Sie auf einem Windows/DOS-Rechner? – anubhava
oder könnte ich einfach den Dateipfad und die Zeilennummer von grep übergeben, anstatt mit der Musterdatei vergleichen zu müssen ... wieder? – VileTouch
Ja, es ist Windows, aber wenn ich statt CMD Pfefferminz öffne, sieht es anders aus, also denke ich nicht, dass es relevant ist. "c: \ out" ist der Pfad, in dem sich alle Dateien befinden, die geändert werden sollen. – VileTouch