Bash:从文件中解析Urls,处理它们,然后从文件中删除它们

时间:2017-03-10 13:30:51

标签: bash parsing sed xargs

我正在尝试自动化系统将获取文件内容(每行1个Url)的过程,使用wget从站点(https文件夹)中获取文件,然后从文件中删除该行。 / p>

我做了几次尝试,但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部分......

提前致谢!

4 个答案:

答案 0 :(得分:2)

如果它是可行的,不要使用猫。这是不好的做法,可能是大文件的问题......你可以改变

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

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

使用双引号的sed更加正确且更简单...我的变体:

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

答案 1 :(得分:1)

我相信你只需要在sed -e之后使用双引号。而不是:

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

你需要

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

答案 2 :(得分: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

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

答案 3 :(得分:0)

我看到你想要做什么,但我不理解import matplotlib.pyplot as plt import numpy as np x = np.linspace(0,2*np.pi,100) y = np.sin(x) plt.figure() plt.plot(x,y) plt.xlabel('x') plt.ylabel('sin(x)') plt.savefig('image.eps', format='eps') 命令,包括管道。也许是一些我不理解的奇特格式。

无论如何,我认为sed命令应该是这样的......

sed

此命令将从流中删除所有@ 我希望这有帮助!