使用wget,网页将作为.txt文件下载。保存的文件使用网页的部分网址命名,例如。 wget http://www.example.com/page/12345/ -O 12345.txt
,为方便起见。
我正在从shell脚本.sh
文件运行命令,因为它可以执行多个命令,例如,每行一行。
下载文件后,我使用sed来解析我想要保留的文本/字符。我想要的部分内容包括blah blah Product ID a5678
。
我想要的是使用sed查找a5678
并使用它将文件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 :(得分:1)
尽量减少,尽量适合你的逻辑。
in=12345.txt
out=$( grep ' Product ID ' $in | sed 's/.* Product ID \([^ ]*\) .*/\1/' )
mkdir -p $out
mv $in $out/$out.txt
答案 1 :(得分:0)
谢谢大家!凭借你的灵感,我解决了我的问题(不使用grep):
in=12345
out=$(sed -n '/pattern/ s/.*ID *//p' $in.txt)
mv $in.txt $out.txt
cd ..
mv $in $out