2017-10-16 115 views
0

使用wget,網頁將作爲.txt文件下載。保存的這個文件使用網頁的一部分url命名,例如。 wget http://www.example.com/page/12345/ -O 12345.txt,爲了方便起見。在txt文件中使用sed查找ID並使用ID來重命名文件

我正在從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

除非你是在文件_replacing_角色,我可能只是使用'grep'代替,切割的結果,以提取我需要重新命名弦。或者切換到Perl ... – jdv

回答

1

試圖最小化,所以適合你的邏輯。

in=12345.txt 
out=$(grep ' Product ID ' $in | sed 's/.* Product ID \([^ ]*\) .*/\1/') 
mkdir -p $out 
mv $in $out/$out.txt 
+1

我可能會建議幾個mod:在grep中添加一個'-m 1'標記(以防止多個匹配),並添加一個'if [$ out];然後是'mkdir'和'mv'命令的''子句,所以如果找不到字符串,就不會有奇怪的行爲。 – HardcoreHenry

0

謝謝大家!隨着你的靈感,我解決我的問題通過(不使用grep的):

in=12345 
out=$(sed -n '/pattern/ s/.*ID *//p' $in.txt) 
mv $in.txt $out.txt 
cd .. 
mv $in $out 
+0

我想我終於想出了'-n' - '/ p'組合,哈哈。謝謝。 :) –

相關問題