2017-10-16 1 views
0

Mit wget wird eine Webseite als TXT-Datei heruntergeladen. Diese gespeicherte Datei wird mit einem Teil der URL der Webseite benannt, z. wget http://www.example.com/page/12345/ -O 12345.txt, für die Bequemlichkeit.Verwenden Sie sed find ID in der txt-Datei und verwenden Sie die ID zum Umbenennen der Datei

Ich führe Befehle von einem Shell-Skript .sh Datei, wie es mehrere Befehle ausführen kann, eine Zeile zur Zeit, z.

Nachdem eine Datei heruntergeladen wurde, verwende ich sed, um nach Text/Zeichen zu suchen, die ich behalten möchte. Ein Teil des Textes, den ich möchte, enthält blah blah Product ID a5678.

Was ich will ist mit sed zu finden a5678 und verwenden Sie dies um die Datei 12345.txt in a5678.txt umzubenennen.

# script.sh 
wget http://www.example.com/page/12345/ -O 12345.txt 
sed -i '' 's/pattern/replace/g' 12345.txt 
sed command to find a5678 # in line blah blah Product ID a5678 
some more sed commands 
mv 12345.txt a5678.txt (or use a variable $var.txt)? 

Wie mache ich das?

Ich möchte auch die gleiche ID a5678 verwenden und einen Ordner mit dem gleichen Namen a5678 erstellen. Daher befindet sich die TXT-Datei innerhalb des Ordners wie folgt: /a5678/a5678.txt.

Ich habe für einen halben Tag nach Antworten gesucht, kann aber keine finden Die nächste, die ich gefunden habe, ist Find instance of word in files and change it to the filename, aber es ist das genaue Gegenteil von dem, was ich will. Ich habe auch über die Verwendung von Variablen gedacht, z. https://askubuntu.com/questions/76808/how-do-i-use-variables-in-a-sed-command aber ich kann die gefundenen Zeichen nicht als Variable speichern.

Sehr freuen uns auf etwas Hilfe! Vielen Dank! Ich bin auf einem Mac mit Sierra unterwegs.

+0

Sofern Sie _replacing_ Zeichen in den Dateien sind, könnte ich nur 'statt grep' verwenden, um die Ergebnisse schneiden die Saiten zu extrahieren ich für Umbenennung müssen . Oder wechsle zu perl ... – jdv

Antwort

1

Versuchen zu minimieren, passen Sie dies in Ihre Logik.

in=12345.txt 
out=$(grep ' Product ID ' $in | sed 's/.* Product ID \([^ ]*\) .*/\1/') 
mkdir -p $out 
mv $in $out/$out.txt 
+1

ein paar Mods, die ich vorschlagen könnte: füge ein '-m 1'-Flag zum 'grep' hinzu (um mehrere Übereinstimmungen zu vermeiden), und füge ein' if [$ out]; then '-Klausel um die Befehle' mkdir' und 'mv'. Wenn also die Zeichenfolge nicht gefunden wird, erhalten Sie keine merkwürdigen Verhaltensweisen. – HardcoreHenry

0

Danke euch allen! Mit Ihrer Inspiration, löste ich mein Problem durch (ohne grep):

in=12345 
out=$(sed -n '/pattern/ s/.*ID *//p' $in.txt) 
mv $in.txt $out.txt 
cd .. 
mv $in $out 
+0

Und ich denke, ich habe endlich die '-n' -'/p'-Kombination gefunden, lol. Vielen Dank. :) –

Verwandte Themen