Ich möchte ein Skript machen, dass die folgenden automatisch tun können:Wie erstellt man ein Skript, um mehrere Greps über eine Datei zu machen?
grep 'string1' file.txt | grep 'string2' | grep 'string3' ... | grep 'stringN'
Die Idee ist, dass das Skript wie folgt ausgeführt werden können:
myScript.sh file.txt string1 string2 string3 ... stringN
und das Skript hat alle Linien zurück von file.txt
, die alle Zeichenfolgen enthalten.
Zum Beispiel, wenn file.txt
sieht wie folgt aus:
hello world
hello world run
hello planet world
Und ich kann ein grep wie diese machen:
grep hello file.txt | grep world
und ich bekomme:
hello world
hello world run
hello planet world
Ich möchte Machen Sie ein Skript, das dies automatisch vornimmt, mit einer undefinierten Anzahl von Strings als Parameter.
Ich fand, dass es schwierig ist, dies zu erreichen, da die Anzahl der Strings variabel sein kann. Zuerst habe ich versucht, ein Array args
wie dies in myScript.sh
genannt zu schaffen: mit dem Zweck
#!/bin/bash
args=("[email protected]")
der Argumente zu speichern. Ich weiß, dass die meine file.txt
sein wird und der Rest sind die Saiten, die ich in den verschiedenen Greps verwenden muss, aber ich weiß nicht, wie man vorgeht und ob dies der beste Ansatz ist, um das Problem zu lösen. Ich würde mich über jeden Vorschlag freuen, wie dies zu programmieren ist.
Ich weiß nicht, wie Sie Ihr Skript ausführen, da ich Ihren Code in eine Datei namens myScritpt.sh einfügen und ich myScript.sh file.txt string1 ... stringN ausführen, aber es funktioniert nicht, und ich tu 'es nicht Ich weiß, warum Sie #!/bin/sh statt #!/bin/bash geschrieben haben, ich glaube, dass dies im Bash-Skript gemacht werden kann und es unnötig ist, Python in diesem einfachen Fall zu verwenden. – neo33
Bash ist eine Obermenge von 'sh' aka Bourne Shell. Es gibt keine Bash-spezifischen Konstrukte in diesem Skript, aber es steht Ihnen natürlich frei, den Shebang so zu ändern, dass er auf Bash zeigt, wenn Sie sich dadurch irgendwie wohler fühlen. Wie auch immer, Sie würden das Skript einfach mit './MyScript.sh' ausführen, nachdem Sie' chmod + x' es getan haben (obwohl ich für eine explizite '.sh' Erweiterung für interaktive Befehle empfehlen würde und diese spezielle Erweiterung schlägt a Bourne, nicht Bash, Skript). – tripleee
Dieses Skript ist einfach, aber nicht vollständig robust. Für Ihren eigenen persönlichen Gebrauch und/oder mit seinen Mängeln und Einschränkungen ordnungsgemäß dokumentiert, ist es in Ordnung, wie es ist. Für ein Tool für die öffentliche Verbreitung würde ich zu Python oder Perl wechseln, einfach weil "sed" mit vom Benutzer bereitgestellten Skriptfragmenten eine Herausforderung darstellt, um vollständig robust zu sein. – tripleee