[问题求助=已解决] 请问如何从文本提取多处字符串为另一文件重命名(保留空格显示)?

sh/bash/dash/ksh/zsh等Shell脚本
Points
帖子: 83
注册时间: 2010-02-19 16:13

[问题求助=已解决] 请问如何从文本提取多处字符串为另一文件重命名(保留空格显示)?

#1

帖子 Points » 2012-01-24 14:21

现有一可执行文件.Qsed.exe和文本文件Qsedlist内容:

代码: 全选

qvod://340102707|F067D1817B9D47B77B34AC307BD632173C7DC39B|钱多多嫁人记_01-HDTV无水印.rmvb|
qvod://242026324|831FFD9E706292A883259BC2D10AE23FA3E41858|\u671D\u6BD4\u5948\u308B\u3044(\u4E2D\u6587\u5B57\u5E55)_钱多多嫁人记_02-HDTV无水印.mkv|
通过shell脚本:

代码: 全选

#!/bin/sh 

awk -F"|" '{print $2}' Qsedlist | sed 's/^/Qsed.rmvb_/g' | while read t;do cp Qsed.exe $t.exe;done
能获得:

代码: 全选

Qsed.rmvb_F067D1817B9D47B77B34AC307BD632173C7DC39B.exe
Qsed.rmvb_831FFD9E706292A883259BC2D10AE23FA3E41858.exe
现在想获得的文件名为:

代码: 全选

钱多多嫁人记_01-HDTV无水印.rmvb_F067D1817B9D47B77B34AC307BD632173C7DC39B.exe
钱多多嫁人记_02-HDTV无水印.mkv_831FFD9E706292A883259BC2D10AE23FA3E41858.exe
求大牛修改,谢谢!!

代码: 全选

#!/bin/sh 

cat Qsedlist |perl -e 'while (<STDIN>){@_=split "\\\|",$_; print "$_[2]_$_[1].exe\n";}' | sed 's/^//g' | while read t;do cp .Qsed.exe $t;done

代码: 全选

#!/bin/sh 

awk -F"|" '{sub(/\\[^_]+_/,"",$3);print $3 "_" $2 ".exe"}' QiAVlist | sed 's/^//g' | while read t;do cp .Qsed.exe $t;done

代码: 全选

#!/bin/sh 

cat QMVlist |awk -F"|" '{print $3 "_" $2 ".exe"}' | sed 's/^//g' | while read t;do cp .Qsed.exe $t;done
三种代码都能实现功能但对字符串中的空格和/号等不能处理。

最新请看:http://forum.ubuntu.com.cn/viewtopic.ph ... 5#p2620507
附件
QvodDownload.7z
(458.13 KiB) 已下载 36 次
上次由 Points 在 2012-01-26 23:24,总共编辑 5 次。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: [问题求助] 请问如何从文本提取多处字符串为另一文件重命名?

#2

帖子 eexpress » 2012-01-24 18:21

● cat Qsedlist |perl -e 'while (<STDIN>){@_=split "\\\|",$_; print "$_[2]_$_[1].exe\n";}'
钱多多嫁人记_01-HDTV无水印.rmvb_F067D1817B9D47B77B34AC307BD632173C7DC39B.exe
朝比奈るい(中文字幕)_钱多多嫁人记_02-HDTV无水印.mkv_831FFD9E706292A883259BC2D10AE23FA3E41858.exe

awk当然也可以。只是如果有特殊情况,没那么灵活而已。
● cat Qsedlist |awk -F"|" '{print $3_$2".exe"}'
钱多多嫁人记_01-HDTV无水印.rmvbF067D1817B9D47B77B34AC307BD632173C7DC39B.exe
朝比奈るい(中文字幕)_钱多多嫁人记_02-HDTV无水印.mkv831FFD9E706292A883259BC2D10AE23FA3E41858.exe
● 鸣学
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: [问题求助] 请问如何从文本提取多处字符串为另一文件重命名?

#3

帖子 fnan » 2012-01-24 21:37

awk -F"|" '{sub(/\\[^_]+_/,"",$3);print $3 "_" $2 ".exe"}' Qsedlist
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
Points
帖子: 83
注册时间: 2010-02-19 16:13

Re: [问题求助] 请问如何从文本提取多处字符串为另一文件重命名?

#4

帖子 Points » 2012-01-25 2:04

下载一楼提供的附件:可实现GNOME MPlayer+Wine Qvod在线看电影了。。 :em06
附图:
GNOME MPlayer+Qvod.png
rediscover
帖子: 3173
注册时间: 2010-01-13 23:26

Re: [问题求助] 请问如何从文本提取多处字符串为另一文件重命名?

#5

帖子 rediscover » 2012-01-25 2:48

Mark一下
Here I am.
Ubuntu 桌面培训 - 全中文官方文档,含汉化截图,提供PDF
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: [问题求助] 请问如何从文本提取多处字符串为另一文件重命名?

#6

帖子 fnan » 2012-01-25 5:03

sed 's/^//g' # 这个有什么用?空格用"$t"解决,/号是表示目录的,不应该使用,必须处理掉。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
Points
帖子: 83
注册时间: 2010-02-19 16:13

Re: [问题求助] 请问如何从文本提取多处字符串为另一文件重命名?

#7

帖子 Points » 2012-01-25 12:05

通过ScriptNo插件
ScriptNo.png
在网络上取得类

代码: 全选

qvod://710496552|994AEB4832BC76C5BCD56A08E0BD167CD9A6C638|极速60秒-主演:尼古拉斯·凯奇&安吉丽娜·朱莉-BDRip.rmvb|
链接写入Qsedlist
http://www.qvod.ws/play/?25956-0-1.html页面源代码中86行可取得DVD版链接

代码: 全选

qvod://624106932|D0D380A0C5227C6D99FDA98DC439C09127D449C8|\u52A0\u52D2\u6BD4\u6D77\u76D74\uFF1A\u964C\u751F\u7684\u6F6E\u6C50DVD\u4E2D\u5B57.rmvb|
和BD版链接

代码: 全选

qvod://570813088|095296C1736BF528FD0DC6F1F1A53AFB8A4A9386|\u52A0\u52D2\u6BD4\u6D77\u76D74\uFF1A\u60CA\u6D9B\u602A\u6D6ABD\u4E2D\u82F1\u53CC\u8BED\u5B57\u5E55.rmvb|
可手工修改为

代码: 全选

qvod://570813088|095296C1736BF528FD0DC6F1F1A53AFB8A4A9386|加勒比海盗4-BD.rmvb|
写入Qsedlist文本保存。运行QvodDownload (Qsed)脚本

代码: 全选

#!/bin/sh 
mkdir ../Qsedcat Qsedlist |perl -e 'while (<STDIN>){@_=split "\\\|",$_; print "$_[2]_$_[1].exe\n";}' | while read t;do cp .Qsed.exe ../Qsed/$t;done
会将.Qsed.exe复制并重命名为../Qsed/

代码: 全选

加勒比海盗4-BD.rmvb_095296C1736BF528FD0DC6F1F1A53AFB8A4A9386.exe
运行此exe文件可生成下载文件加勒比海盗4-BD.rmvb.!qd等此文件下载缓冲一会后就可以用GNOME MPlayer播放。。边下边播不用虚拟机哦。。现求大牛修改成浏览器脚本能自动取得播放链接并按如上格式复制重命名.Qsed.exe运行,谢谢!!
PS:最好能自动调用GNOME MPlayer播放。。^_^
附图:
GNOME MPlayer+Qvod.png
下载QvodDownload.7z解压到用户任意目录即可使用
附件
QvodDownload.7z
(458.13 KiB) 已下载 29 次
上次由 Points 在 2012-01-25 17:19,总共编辑 2 次。
Points
帖子: 83
注册时间: 2010-02-19 16:13

Re: [问题求助] 请问如何从文本提取多处字符串为另一文件重命名?

#8

帖子 Points » 2012-01-25 12:09

fnan 写了:sed 's/^//g' # 这个有什么用?空格用"$t"解决,/号是表示目录的,不应该使用,必须处理掉。
我不清楚sed 's/^//g' 是做什么的只知道单独使用您的代码不能生成可执行文件,但把您的代码替换掉原脚本作者的http://www.oschina.net/code/snippet_131936_7628

代码: 全选

#!/bin/sh 
awk -F"|" '{print $2}' list | sed 's/^/1.rmvb_/g' | while read t;do cp 1.exe $t.exe;done
部分后除了空格不能处理一切都好 :em04
PS:原作者的脚本运行后生成的全是1.rmvb_xxxxxx.exe不好区别 :em06
Points
帖子: 83
注册时间: 2010-02-19 16:13

Re: [问题求助] 请问如何从文本提取多处字符串为另一文件重命名?

#9

帖子 Points » 2012-01-25 14:36

fnan 写了:sed 's/^//g' # 这个有什么用?空格用"$t"解决,/号是表示目录的,不应该使用,必须处理掉。
又试了试

代码: 全选

#!/bin/sh 

mkdir ../QiAV
awk -F"|" '{sub(/\\[^_]+_/,"",$3);print $3 "_" $2 ".exe"}' QiAVlist | while read t;do cp .Qsed.exe ../QiAV/$t;done
可用 :em03 但是如

代码: 全选

qvod://653125941|BA38479EE7BFBA8B4EAB68F648972889AC2D5462|勇闯夺命岛(石破天惊)-主演:肖恩·康纳利 尼古拉斯·凯奇-BDRip.rmvb|
这样的$3取值不了肖恩·康纳利空格尼古拉斯·凯奇这样的文件名必须手工替换为肖恩·康纳利&尼古拉斯·凯奇
头像
josephyoung
帖子: 158
注册时间: 2011-11-05 18:53
来自: 南极圈

Re: [问题求助] 请问如何从文本提取多处字符串为另一文件重命名?

#10

帖子 josephyoung » 2012-01-26 0:06

代码: 全选

sed 's/^[^|]*|\([^|]*\)|\(.*\)|/\2_\1.exe/' Qsedlist

代码: 全选

[joe@joe-laptop test]$ sed 's/^[^|]*|\([^|]*\)|\(.*\)|/\2_\1.exe/' <<< "qvod://653125941|BA38479EE7BFBA8B4EAB68F648972889AC2D5462|勇闯夺命岛(石破天惊)-主演: 肖恩·康纳利 尼古拉斯·凯奇-BDRip.rmvb|"
勇闯夺命岛(石破天惊)-主演:肖恩·康纳利 尼古拉斯·凯奇-BDRip.rmvb_BA38479EE7BFBA8B4EAB68F648972889AC2D5462.exe
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: [问题求助] 请问如何从文本提取多处字符串为另一文件重命名?

#11

帖子 fnan » 2012-01-26 5:01

Points 写了:
fnan 写了:sed 's/^//g' # 这个有什么用?空格用"$t"解决,/号是表示目录的,不应该使用,必须处理掉。
又试了试

代码: 全选

#!/bin/sh 

mkdir ../QiAV
awk -F"|" '{sub(/\\[^_]+_/,"",$3);print $3 "_" $2 ".exe"}' QiAVlist | while read t;do cp .Qsed.exe ../QiAV/$t;done
可用 :em03 但是如

代码: 全选

qvod://653125941|BA38479EE7BFBA8B4EAB68F648972889AC2D5462|勇闯夺命岛(石破天惊)-主演:肖恩·康纳利 尼古拉斯·凯奇-BDRip.rmvb|
这样的$3取值不了肖恩·康纳利空格尼古拉斯·凯奇这样的文件名必须手工替换为肖恩·康纳利&尼古拉斯·凯奇
echo -e "qvod://340102707|F067D1817B9D47B77B34AC307BD632173C7DC39B|钱多多嫁人记_01-HDTV无水印.rmvb|\nqvod://242026324|831FFD9E706292A883259BC2D10AE23FA3E41858|\u671D\u6BD4 \u5948\u308B\u3044(\u4E2D\u6587\u5B57\u5E55)_钱多多嫁人记_02-HDTV无水印.mkv|\nqvod://653125941|BA38479EE7BFBA8B4EAB68F648972889AC2D5462|勇闯夺命岛(石破天惊)-主演:肖恩·康纳利 尼古拉斯·凯奇-BDRip.rmvb|"|awk -F"|" '{sub(/\\[^_]+_/,"",$3);gsub(" ","-",$3);print $3 "_" $2 ".exe"}'
钱多多嫁人记_01-HDTV无水印.rmvb_F067D1817B9D47B77B34AC307BD632173C7DC39B.exe
钱多多嫁人记_02-HDTV无水印.mkv_831FFD9E706292A883259BC2D10AE23FA3E41858.exe
勇闯夺命岛(石破天惊)-主演:肖恩·康纳利-尼古拉斯·凯奇-BDRip.rmvb_BA38479EE7BFBA8B4EAB68F648972889AC2D5462.exe
# 加了空格处理。
上次由 fnan 在 2012-01-26 6:19,总共编辑 2 次。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: [问题求助] 请问如何从文本提取多处字符串为另一文件重命名?

#12

帖子 fnan » 2012-01-26 5:19

Points 写了:
fnan 写了:sed 's/^//g' # 这个有什么用?空格用"$t"解决,/号是表示目录的,不应该使用,必须处理掉。
我不清楚sed 's/^//g' 是做什么的只知道单独使用您的代码不能生成可执行文件,但把您的代码替换掉原脚本作者的http://www.oschina.net/code/snippet_131936_7628

代码: 全选

#!/bin/sh 
awk -F"|" '{print $2}' list | sed 's/^/1.rmvb_/g' | while read t;do cp 1.exe $t.exe;done
部分后除了空格不能处理一切都好 :em04
PS:原作者的脚本运行后生成的全是1.rmvb_xxxxxx.exe不好区别 :em06
| sed 's/^/1.rmvb_/g' #这个只是前面一律加上 1.rmvb_ (没什么用)。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: [问题求助] 请问如何从文本提取多处字符串为另一文件重命名?

#13

帖子 fnan » 2012-01-26 6:16

echo -e "qvod://340102707|F067D1817B9D47B77B34AC307BD632173C7DC39B|钱多多嫁人记_01-HDTV无水印.rmvb|\nqvod://242026324|831FFD9E706292A883259BC2D10AE23FA3E41858|\u671D\u6BD4 \u5948\u308B\u3044(\u4E2D\u6587\u5B57\u5E55)_钱多多嫁人记_02-HDTV无水印.mkv|\nqvod://653125941|BA38479EE7BFBA8B4EAB68F648972889AC2D5462|勇闯夺命岛(石破天惊)-主演:肖恩·康纳利 尼古拉斯·凯奇-BDRip.rmvb|"| sed -r 's/^[^|]+\|([^|]+)\|(\\[^_]+_)?([^|]+)\|/\3_\1.exe/;s/ /-/g'
钱多多嫁人记_01-HDTV无水印.rmvb_F067D1817B9D47B77B34AC307BD632173C7DC39B.exe
钱多多嫁人记_02-HDTV无水印.mkv_831FFD9E706292A883259BC2D10AE23FA3E41858.exe
勇闯夺命岛(石破天惊)-主演:肖恩·康纳利-尼古拉斯·凯奇-BDRip.rmvb_BA38479EE7BFBA8B4EAB68F648972889AC2D5462.exe
#sed
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
Points
帖子: 83
注册时间: 2010-02-19 16:13

Re: [问题求助] 请问如何从文本提取多处字符串为另一文件重命名?

#14

帖子 Points » 2012-01-26 19:19

josephyoung 写了:

代码: 全选

sed 's/^[^|]*|\([^|]*\)|\(.*\)|/\2_\1.exe/' Qsedlist

代码: 全选

[joe@joe-laptop test]$ sed 's/^[^|]*|\([^|]*\)|\(.*\)|/\2_\1.exe/' <<< "qvod://653125941|BA38479EE7BFBA8B4EAB68F648972889AC2D5462|勇闯夺命岛(石破天惊)-主演: 肖恩·康纳利 尼古拉斯·凯奇-BDRip.rmvb|"
勇闯夺命岛(石破天惊)-主演:肖恩·康纳利 尼古拉斯·凯奇-BDRip.rmvb_BA38479EE7BFBA8B4EAB68F648972889AC2D5462.exe

代码: 全选

sed 's/^[^|]*|\([^|]*\)|\(.*\)|/\2_\1.exe/' Qsedlist
代码还是不支持显示空格主演: 肖恩·康纳利空格尼古拉斯·凯奇
但是不带空格的可以 用。。谢谢 :em01
Points
帖子: 83
注册时间: 2010-02-19 16:13

Re: [问题求助] 请问如何从文本提取多处字符串为另一文件重命名?

#15

帖子 Points » 2012-01-26 19:22

fnan 写了:awk -F"|" '{sub(/\\[^_]+_/,"",$3);gsub(" ","-",$3);print $3 "_" $2 ".exe"}'
可以用但是空格换成了-能不能不换就显示空格就好。。 :em06 麻烦乐!!
回复