2017-10-16 7 views
0

wgetを使用すると、Webページが.txtファイルとしてダウンロードされます。保存されたこのファイルの名前は、WebページのURLの一部を使用して指定されます(例:便宜上、wget http://www.example.com/page/12345/ -O 12345.txtである。txtファイルでsed find IDを使用し、IDを使用してファイル名を変更します

私はシェルスクリプト.shファイルからコマンドを実行しています。複数のコマンドを実行することができます。

ファイルがダウンロードされた後、私は保存したいテキスト/文字をsedで解析します。私が欲しいテキストの一部にはblah blah Product ID a5678が含まれています。

私が欲しいのは、a5678を見つけるのにsedを使い、これを使ってファイル12345.txtの名前をa5678.txtに変更することです。

# 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)? 

どうすればよいですか?

この同じID a5678を使用して、同じ名前のフォルダを作成することもできます。a5678したがって、.txtファイルは/a5678/a5678.txtのようなフォルダ内にあります。

mkdir a5678 (or mkdir $var)? && cd a5678 

私は半日の回答を検索しましたが、何も見つかりませんでした。私が見つけた最も近いものは Find instance of word in files and change it to the filenameですが、それは私が望むものとまったく反対です。私は変数の使用についても考えました。 https://askubuntu.com/questions/76808/how-do-i-use-variables-in-a-sed-commandでも、見つかった文字を変数として保存する方法はわかりません。

非常に助けを楽しみにしています!ありがとうございました!私はSierraを走らせているMacにいる。

+0

あなたはファイル内_replacing_文字でない限り、私はちょうど私が名前変更のために必要な文字列を抽出するために結果を切断、代わりに 'grep'使用する場合があります。または、perlに切り替えてください... – jdv

答えて

1

最小化しようとしているので、これをロジックに合わせてください。

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

私はいくつかの改造を提案します:複数のマッチを避けるために 'grep'に' -m 1'フラグを追加し、 'if [$ out]; 'mkdir'や' mv'コマンドの前後に ''をつけると、文字列が見つからなければあなたは奇妙な動作をしません。 – HardcoreHenry

0

ありがとうございました!あなたのインスピレーションで、私は(はgrepを使用せずに)で私の問題を解決:

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

そして、私は最後に '-n' - '/p'コンボ、lolを見つけたと思います。ありがとう。 :) –

関連する問題