我正在尝试自动化系统将获取文件内容(每行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
部分......
提前致谢!
答案 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
答案 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
此命令将从流中删除所有@ 我希望这有帮助!