sed的一个问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
esolve
帖子: 210
注册时间: 2010-05-08 4:52

sed的一个问题

#1

帖子 esolve » 2012-10-06 6:54

要用sed将一个叫example.html文件中<iframe>
那行里 /embed/后面与?hl=en 之前的
kOZZx-QYpsM换成另外一个字串
比如
s5fZx-QtpsM

怎么进行

代码: 全选

  "-//IETF//DTD HTML LEVEL 1//EN">
<HTML>
  <HEAD>
    <TITLE>Blank HTML Level 1 Page</TITLE>
    <META HTTP-EQUIV="Content-Type" 
          CONTENT="text/html; charset=utf-8">
  </HEAD>
  <BODY>
<iframe width="1000" height="650" src="http://www.youtube.com/embed/kOZZx-QYpsM?hl=en&fs=1&showinfo=0&autoplay=1" frameborder="0" allowfullscreen></iframe>

  </BODY>
</HTML>
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: sed的一个问题

#2

帖子 YeLee » 2012-10-06 9:21

听你说得好复杂啊,一般替换字串假如是特例的话,我都直接用sed -i 's/kOZZx-QYpsM/s5fZx-QtpsM/' example.html的。
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: sed的一个问题

#3

帖子 eexpress » 2012-10-06 20:56

● echo "http://www.youtube.com/embed/kOZZx-QYps ... lay=1"|sed 's/\(embed\/\).*\(?hl\)/\1xxx\2/'
http://www.youtube.com/embed/xxx?hl=en& ... autoplay=1

其实,你这涉及到贪婪匹配的问题。换perlre 就不成问题。
● 鸣学
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: sed的一个问题

#4

帖子 枫叶饭团 » 2012-10-06 21:01

eexpress 写了:● echo "http://www.youtube.com/embed/kOZZx-QYps ... lay=1"|sed 's/\(embed\/\).*\(?hl\)/\1xxx\2/'
http://www.youtube.com/embed/xxx?hl=en& ... autoplay=1

其实,你这涉及到贪婪匹配的问题。换python就不成问题。
头像
cjxgm
帖子: 1952
注册时间: 2010-04-23 20:40
系统: Arch Linux
来自: 浙江·杭州
联系:

Re: sed的一个问题

#5

帖子 cjxgm » 2012-10-06 22:28

eexpress 写了:● echo "http://www.youtube.com/embed/kOZZx-QYps ... lay=1"|sed 's/\(embed\/\).*\(?hl\)/\1xxx\2/'
http://www.youtube.com/embed/xxx?hl=en& ... autoplay=1

其实,你这涉及到贪婪匹配的问题。换perlre 就不成问题。
贪婪匹配问题可以用别的方式解决

代码: 全选

sed 's/\(<iframe[^>]\+\/embed\/\)[^?]\+\([^>]\+>\)/\1s5fZx-QtpsM\2/g'
Clanjor Prods. | Develop for Developers. (C++, Lua) | 作曲编曲 | 实时渲染引擎
回复