2017-03-10 3 views
0

システムがファイルの内容を取得する手順を自動化しようとしています(1行に1Url)。wgetを使用してファイルを取得しますサイト(httpsフォルダ)を開き、ファイルから行を削除します。Bash:ファイルからUrlを解析して処理し、ファイルから削除します。

私はいくつか試しましたが、sed部分(最後に)は文字列を理解できず(エスケープ文字を試しました)、そのファイルから削除しました!コードの

cat File 
https://something.net/xxx/data/Folder1/ 
https://something.net/xxx/data/Folder2/ 
https://something.net/xxx/data/Folder3/ 

私の行は次のとおりです。事前に

cat File | xargs -n1 -I @ bash -c 'wget -r -nd -l 1 -c -A rar,zip,7z,txt,jpg,iso,sfv,md5,pdf --no-parent --restrict-file-names=nocontrol --user=test --password=pass --no-check-certificate "@" -P /mnt/USB/ && sed -e 's|@||g' File' 

それはsed -e 's|@||g' File部分まで動作します。..

ありがとう!

+0

あなたはなぜラインによって、そのコンテンツの行を削除し、ファイル全体を読みするつもりなら?あなたはちょうど 'data = $(cat File)できませんでした。 echo -n>ファイル '? – Aaron

+0

さらに進んだ場合は、 'flock'の使用を検討してください。 – Aaron

答えて

1

@beliyの回答はよく見えます!

あなたはワンライナーをしたい場合は、あなたが行うことができます:

while read -r line; do \ 
wget -r -nd -l 1 -c -A rar,zip,7z,txt,jpg,iso,sfv,md5,pdf \ 
--no-parent --restrict-file-names=nocontrol --user=test \ 
--password=pass --no-check-certificate "$line" -P /mnt/USB/ \ 
&& sed -i -e '\|'"$line"'|d' "File.txt"; \ 
done < File.txt 

EDIT: You need to add a \ in front of the first pipe

+0

返信いただきありがとうございます! それはそれは私が手sedの一部に達したとき(3偽及び1つの良い)私はそれを実行し、それは私が追加の試験場所をダウンロードしようとしながら..余分なスペースを必要とします後:、-e式#1: はsedのをchar 1:未知のコマンド: '| ' – tfonias74

+0

良い点、最初の '|'の前に '\'が必要であることは明らかですが、私はそれを知りませんでした!ありがとう! – jraynal

+0

正しいです。 'sed -e with sed -i'を変更した場合、それはまさに私が探していたものです;) – tfonias74

1

sed -eの後に二重引用符を使用する必要があると思います。代わりに:

'...&& sed -e 's|@||g' File' 

あなたは私はあなたがやろうとか見て、私はパイプを含むsedコマンドを理解しない

'...&& sed -e '"'s|@||g'"' File' 
+0

返信いただきありがとうございます! 二重引用符は動作します(エラーの際に使用されます)。 – tfonias74

+0

私は 'sed -i '"' @ @ d '' ''に変更しようとしていますが、動作させることはできません。 – tfonias74

0

が必要になります。たぶん私は理解していないいくつかの派手な形式。

とにかく、私はsedコマンドは次のようになります...

sed -e 's/@//g' 

このコマンドは、ストリームからすべての@を削除すると思います。
こちらがお役に立てば幸いです。

+0

私は、URL自体にあるスラッシュを避けるためにパイプに切り替えました。 – tfonias74

2

ポーズがある場合は、catを使用しないでください。それは...私のバリアント悪い習慣だと、大きなファイルに問題があることができます...あなたはそれがより正確であると、二重引用符でsedを使用する方が簡単になるの

for siteUrl in $(< "File"); do 

cat File | xargs -n1 -I @ bash -c 

を変更することができます。

scriptDir=$(dirname -- "$0") 
for siteUrl in $(< "$scriptDir/File.txt") 
do 
    if [[ -z "$siteUrl" ]]; then break; fi # break line if him empty 
    wget -r -nd -l 1 -c -A rar,zip,7z,txt,jpg,iso,sfv,md5,pdf --no-parent --restrict-file-names=nocontrol --user=test --password=pass --no-check-certificate "$siteUrl" -P /mnt/USB/ && sed -i "s|$siteUrl||g" "$scriptDir/File.txt" 
done 
+0

返信ありがとう! ファイル自体を更新するにはどうすればよいですか? 私は4行でテストします(3つは有効ではなく、1つは有効です)。私は希望の出力(それらの間にギャップを持つ4行、有効な行方不明)が画面に表示されますが、ファイルは変更されません。 – tfonias74

+0

'sed -i" | $ siteUrl | d "'に切り替えようとしましたが、 'sed:-e式#1、char 1:未知のコマンド:' | ''。 – tfonias74

+0

URLにスペースが含まれている場合、別の問題もあります。 – tfonias74

関連する問題