echo "mv u3_yunying.war   u3_yunying.war_`date +%Y%m%d%H%M`" | sed
"s/\(mv\) \(\w*.war\)   \(\w*.war_\w*\)/\1/g"

echo "mv u3_yunying.war   u3_yunying.war_`date +%Y%m%d%H%M`" |
sed "s/\(mv\) \(\w*.war\)   \(\w*.war_\w*\)/\1 \2 \/tmp\/\3/g"

echo "mv a1_a.war" | sed "s/\(mv\) \(\w\)/\2/g"

echo "tar -zcvf tomcat" | sed  "s/tar\ -zcvf\ /tar\ -zcvf\
\/tmp\//g"

echo "tar -zcvf tomcat" |sed 's/\(tar\) \(-zcvf\)
\([a-zA-Z]\+\)/\3/g'

如何用Sed和正则表达式提取子字符串

现在有如下一串字符串:

"asdfkjasldjkf"shiner"df

需求:

需要提取出shiner子字符串。

命令如下:

[root@localhost /]$  echo "asdfkjasldjkf\"shiner\"df"
| sed 's/\(.*\)"\(.*\)"\(.*\)/\2/g'

shiner

命令解释

s: 表示替换命令

\(.*\)" : 表示第一个引号前的内容

"\(.*\)":表示两引号之间的内容

)"\(.*\):表示引号后的内容

\2: 表示第二对括号里面的内容

括号里的表达式匹配的内容,可以用\1,\2等进行引用,第n个括号对内的内容,就用\n引用。

这个命令的意思是:

用\2代表的第二个括号的内容(shiner)去替换整个字符串,这样就得到了我们所需要的子字符串了。

sed命令可以替换给定文本中的字符串。它可以利用正则表达式进行匹配。

    $ sed ‘s/pattern/replace_string/’ file

Sed命令也可以从stdin中读取输入,如:

    $ cat file | sed
‘s/pattern/replace_string/’

使用-i选项,sed可以将替换结果应用于原文件,如:

    $ sed –i ‘s/text/replace/’ file

以上sed命令会将每一行中第一处符合样式的内容替换掉,如果要替换每一行中的所有内容,可在命令尾部加上参数g,如:

    $ sed ‘s/pattern/replace_string/g’ file

选项/Ng可以忽略前N-1处匹配,并从第N处开始替换,如:

    $echo thisthisthisthis | sed
‘s/this/THIS/3g’

    thisthisTHISTHIS

字符/在sed命令中作为定界符使用,其实任意字符都可以当作定界符,如:

    $ sed ‘s:text:replace:g’

    $ sed ‘s|text|replace|g’

当定界符出现在样式内部时,我们必须使用前缀\对它进行转义。

/pattern/d会移除匹配样式的行,我们可以利用这个移除文件空白行:

    $ sed ‘/^$/d’ file

在sed中,用&标记匹配样式的字符串,例如:

    $ echo this is an example | sed
‘s/\w\+/[&]/g’

    [this] [is] [an] [example]

正则表达式\w\+匹配每一个单词,&对应于之前所匹配到的单词。

Sed命令也可以匹配给定样式中的子串。\(pattern\)用于匹配子串。模式被包括在使用斜线转义过的()中。对于匹配到的第一个子串,其对应的标记是\1,匹配到的第二个子串是\2,往后依次类推。例:

    $ echo this is digit 7 in a number | sed
‘s/digit \([0-9]\)/\1/’

    This is 7 in a number

这条命令将digit 7替换为7。样式中匹配到的子串是7。下面是包含多个匹配的例子:

    $ echo seven EIGHT | sed ‘s/\([a-z]\+\)
\([A-Z]\+\)/\2 \1/’

    EIGHT seven

([a-z]\+\)匹配第一个单词,([A-Z]\+\)匹配第二个单词,\1和\2用来引用它们。

Sed命令还可以组合多个表达式,如利用管道组合多个sed命令的方法可以用以下方式代替:

    $ sed ‘expression1’ | sed ‘expression2’

这等价于

    $ sed ‘expression1; expression2’

Sed表达式通常用单引号来引用。不过也可以使用双引号。双引号会通过对表达式求值来对其进行扩展,例如:

    $ text=hello

    $ echo hello world | sed “s/$text/HELLO/”

    HELLO world

Sed应用(我工作中碰到的问题):


    应用1
有这样一个文件,每行的格式为:

type1=value1  
type2=value2  
type3=value3…

其中type类型个数未知,每种type之间以’\t’隔开,要求提取出=右边的value,输出格式为:

value1     
value2     
value3…

value之间以’\t’隔开。


解决方案:
用sed语句将=左边的字符替换成空串。

$sed –r ‘s/[^\t]*://g’ file

其中-r选项表示使用扩展的正则表达式

 


应用2
有这样一个文件,每行的格式为:

{type}:value     
t3    
t4…

其中value与t之间以’\t’隔开,要求将type和value提取出来,输出格式为:

type value        
t3    
t4…

各数据之间以’\t’隔开。


解决方案:
用sed语句将{type}:替换为type\t,使用子串替换的方法。

$ sed ‘s/{\(\w\+\)}:/\1\t/g’ file

regular expression (如何用Sed和正则表达式提取子字符串)的更多相关文章

  1. JavaScript中,提取子字符串方法:Slice、Substring、Substr的比较。

    在JavaScript中,提取子字符串主要是通过 Slice.Substring.Substr 三个方法之一. // slice // 语法: string.slice(beginSlice [, e ...

  2. Java基础之一组有用的类——使用正则表达式搜索子字符串(TryRegex)

    控制台程序. 正则表达式只是一个字符串,描述了在其他字符串中搜索匹配的模式.但这不是被动地进行字符序列匹配,正则表达式其实是一个微型程序,用于一种特殊的计算机——状态机.状态机并不是真正的机器,而是软 ...

  3. 6.4 C++提取子字符串及字符串的比较

    参考:http://www.weixueyuan.net/view/6393.html 总结: 函数substr可以提取string字符串中的子字符串,该函数有两个参数,第一个参数为需要提取的子字符串 ...

  4. javascript正则表达式提取子匹配项

    C#里所用的正则表达式,如果要提取字符串里的子匹配项(我都不知道那个叫啥名字,别名?)是很方便的,比如: Regex rx = new Regex(@"<title>(?< ...

  5. Java正则表达式提取String字符串中的IP地址

    /** * 正则提前字符串中的IP地址 * @param ipString * @return */ public static List<String> getIps(String ip ...

  6. php正则表达式取子字符串及替换

    最近在学习如何用php编写cms,想把文章中的第一个图片提取出来当做缩略图显示到前面,想到的方法就是把文章内容作为一个大字符串,然后用正则表达式找出匹配出第一次出现<img src=" ...

  7. Java基础-正则表达式(Regular Expression)语法规则简介

    Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...

  8. grep(Global Regular Expression Print)

    .grep -iwr --color 'hellp' /home/weblogic/demo 或者 grep -iw --color 'hellp' /home/weblogic/demo/* (-i ...

  9. Jmeter 正则表达式提取器详解(Regular Expression Exactor)

    Jmeter 正则表达式提取器详解(Regular Expression Exactor) Name(名称):随意设置,最好有业务意义. Comments(注释):随意设置,可以为空 Apply to ...

随机推荐

  1. texlive测试是否安装成功

    在完成TEX Live安装之后,自然你会希望试试看它是否正常工作,好让你在以后能够创建优美的文档和字体. 1.首先确认你可以执行tex程序: >tex --version TeX 3.14159 ...

  2. Socket网络编程--小小网盘程序(5)

    各位好呀!这一小节应该就是这个小小网盘程序的最后一小节了,这一节将实现最后的三个功能,即列出用户在服务器中的文件列表,还有删除用户在服务器中的文件,最后的可以共享文件给好友. 列出用户在服务器中的文件 ...

  3. 【Tomcat】Servlet 工作原理解析

    Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...

  4. python(60):configparser 函数,配置文件

    ConfigParser模块学习 介绍 ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section),每 ...

  5. linux每日命令(32):gzip命令

    减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.gzip不仅可以用 ...

  6. 【iCore4 双核心板_FPGA】例程十三:基于SPI的ARM与FPGA通信实验

    实验现象: 1.先烧写ARM程序,然后烧写FPGA程序. 2.打开串口精灵,通过串口精灵给ARM发送数据从而给FPGA发送数据 ,会接收到字符HELLO. 3.通过串口精灵发送命令可以控制ARM·LE ...

  7. 编译错误“The run destination My Mac is not valid for Running the scheme '***',解决办法

    [转载]   http://blog.csdn.net/duanyipeng/article/details/8007684   编译错误"The run destination My Ma ...

  8. 去除partner页面消息 自动添加关注者的功能

    某些公司希望在partner页面说些partner的坏话,可是odoo居然自动添加了partner关注,这就尴尬了.... 如果恰搭建了邮件服务器,很有可能就自动发到了客户邮箱里,等着炸锅吧.... ...

  9. scrapy爬取某网站,模拟登陆过程中遇到的那些坑

    本节内容 在访问网站的时候,我们经常遇到有些页面必须用户登录才能访问.这个时候我们之前写的傻傻的爬虫就被ban在门外了.所以本节,我们给爬虫配置cookie,使得爬虫能保持用户已登录的状态,达到获得那 ...

  10. invalid bound statement (not found)解决办法

    最近搭建一个web项目后端SSM框架练手,使用Maven管理,遇到一个深坑invalid bound statement (not found),就是mapper文件扫描不到!!! 先上整合过程,解决 ...