在txt文件中使用sed查找ID并使用ID来重命名文件
使用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上。
试图最小化,所以适合你的逻辑。
in=12345.txt
out=$(grep ' Product ID ' $in | sed 's/.* Product ID \([^ ]*\) .*/\1/')
mkdir -p $out
mv $in $out/$out.txt
我可能会建议几个mod:在grep中添加一个'-m 1'标记(以防止多个匹配),并添加一个'if [$ out];然后是'mkdir'和'mv'命令的''子句,所以如果找不到字符串,就不会有奇怪的行为。 – HardcoreHenry
谢谢大家!随着你的灵感,我解决我的问题通过(不使用grep的):
in=12345
out=$(sed -n '/pattern/ s/.*ID *//p' $in.txt)
mv $in.txt $out.txt
cd ..
mv $in $out
我想我终于想出了'-n' - '/ p'组合,哈哈。谢谢。 :) –
除非你是在文件_replacing_角色,我可能只是使用'grep'代替,切割的结果,以提取我需要重新命名弦。或者切换到Perl ... – jdv