Durchführung regex erfassen und dann ersetzen mit SED/PERL
Ich habe eine Datei, die sieht aus wie diese (nennen wir diese Datei submit.txt
):
dir1/pmid_5409464.txt
dir1/pmid_5788247.txt
dir1/pmid_4971884.txt
Was ich machen will ist die Durchführung einer inline-Datei regex ändern
so, dass es Ergebnisse in der folgenden
perl mycode.pl /home/neversaint/dir1/pmid_5409464.txt > /home/neversaint/dir1/pmid_5409464.output
perl mycode.pl/home/neversaint/dir1/pmid_5788247.txt > /home/neversaint/dir1/pmid_5788247.output
perl mycode.pl /home/neversaint/dir1/pmid_4971884.txt > /home/neversaint/dir1/pmid_4971884.output
Gibt es eine SED/Perl-one-liner zu tun?
Meine Schwierigkeit besteht in der Erfassung der Namen der Eingabedatei und dann
erstellen Sie die Ausgabe-Datei (.output
) - für jede Zeile - Grundlage. Ich bin stecken mit diesem:
sed 's/^/perl mycode.pl \/home\/neversaint\/dir1\//g' submit.txt |
sed 's/$/>/'
awk '{print "xxx/x/y/"$0 "> xxxxxxxx/$0}' list > output
? viel Glück.Nein das geht nicht. Der Punkt ist für jede Zeile erfassen die
pmid_xxx
aus pmid_xxx.txt
und drucken Sie die Ausgabe-version, die pmid_xxx.output
auch für jede Zeile.sed stackoverflow.com/questions/2777579/...
InformationsquelleAutor neversaint | 2013-07-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie entkommen Klammer zu erfassen, Gruppen, und Zugang zu den Gruppen mit \1, \2, usw..
Ausgabe:
edit: es sieht nicht wie sed hat eine integrierte Stelle Bearbeiten der Datei (GNU-sed hat die -i-option). Ist es noch möglich zu tun, aber diese Lösung nur Drucke auf standard-out. Sie können auch ein Perl-one-liner, wie hier gezeigt: sed-Datei zu Bearbeiten
Sie sind herzlich willkommen! Sie könnte verwenden von shell-Variablen, es aufgeteilt, ähnlich wie dieses: stackoverflow.com/questions/8078872/.... Grundsätzlich speichern der such-string in eine variable und ersetzen-string in einem anderen. Ich weiß nicht, ob dieses würde viel helfen, da die replace-string wäre immer noch ziemlich lange. Sie könnten auch legen Sie die suchen-und ersetzen-Teil in eine Datei, und rufen Sie es mit der sed die option-f
InformationsquelleAutor chilemagic
Sie aufgefordert, einen Sed-Einzeiler, du hast es.
sed 's/\([^.]*\)\.txt/perl mycode.pl \/home\/neversaint\/\1.txt > \/home\/neversaint\/\1.output/' submit.txt > output.txt
InformationsquelleAutor AlienHoboken
Der perl oneliner für das gleiche zu tun ist
Der obige Befehl erzeugt einen string ersetzt, der in der Konsole und Sie müssen die Umleitung der Ausgabe in eine andere Datei.
Für den Austausch innerhalb der Datei (inline ersetzen), können Sie hinzufügen der option-i .
Für zB
Oben ausgeführt werden wird, ein ersetzen innerhalb der submit.txt die Datei selbst.
InformationsquelleAutor Ramg