在txt文件中使用sed find ID并使用ID重命名文件

时间:2017-10-16 19:44:51

标签: bash macos shell sed wget

使用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上。

2 个答案:

答案 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