regular expression (如何用Sed和正则表达式提取子字符串)
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和正则表达式提取子字符串)的更多相关文章
- JavaScript中,提取子字符串方法:Slice、Substring、Substr的比较。
在JavaScript中,提取子字符串主要是通过 Slice.Substring.Substr 三个方法之一. // slice // 语法: string.slice(beginSlice [, e ...
- Java基础之一组有用的类——使用正则表达式搜索子字符串(TryRegex)
控制台程序. 正则表达式只是一个字符串,描述了在其他字符串中搜索匹配的模式.但这不是被动地进行字符序列匹配,正则表达式其实是一个微型程序,用于一种特殊的计算机——状态机.状态机并不是真正的机器,而是软 ...
- 6.4 C++提取子字符串及字符串的比较
参考:http://www.weixueyuan.net/view/6393.html 总结: 函数substr可以提取string字符串中的子字符串,该函数有两个参数,第一个参数为需要提取的子字符串 ...
- javascript正则表达式提取子匹配项
C#里所用的正则表达式,如果要提取字符串里的子匹配项(我都不知道那个叫啥名字,别名?)是很方便的,比如: Regex rx = new Regex(@"<title>(?< ...
- Java正则表达式提取String字符串中的IP地址
/** * 正则提前字符串中的IP地址 * @param ipString * @return */ public static List<String> getIps(String ip ...
- php正则表达式取子字符串及替换
最近在学习如何用php编写cms,想把文章中的第一个图片提取出来当做缩略图显示到前面,想到的方法就是把文章内容作为一个大字符串,然后用正则表达式找出匹配出第一次出现<img src=" ...
- Java基础-正则表达式(Regular Expression)语法规则简介
Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...
- grep(Global Regular Expression Print)
.grep -iwr --color 'hellp' /home/weblogic/demo 或者 grep -iw --color 'hellp' /home/weblogic/demo/* (-i ...
- Jmeter 正则表达式提取器详解(Regular Expression Exactor)
Jmeter 正则表达式提取器详解(Regular Expression Exactor) Name(名称):随意设置,最好有业务意义. Comments(注释):随意设置,可以为空 Apply to ...
随机推荐
- Fluent UDF【8】:编译型UDF
UDF除了可以以解释的方式外,其还可以以编译的方式被Fluent加载.解释型UDF只能使用部分C语言功能,而编译型UDF则可以全面使用C语言的所有功能. 1 编译型UDF介绍 编译型UDF的构建方式与 ...
- (转) mysql中left join,right join,inner join的区别
转自:https://blog.csdn.net/qq_35975416/article/details/78842958 sql查询中有一个非常重要的环节就是表的关联查询,一般使用left join ...
- Asp.Net AutoMapper用法
1.AutoMapper简介 用于两个对象映射,例如把Model的属性值赋值给View Model.传统写法会一个一个属性的映射很麻烦,使用AutoMapper两句代码搞定. 2.AutoMapper ...
- 【iCore4 双核心板_ARM】例程七:WWDG看门狗实验——复位ARM
实验原理: STM32内部包含窗口看门狗,通过看门狗可以监控程序运行,程序运行错误时,未在 规定时间喂狗(提前或超时),自动复位ARM,本实验通过按键按下,停止喂狗,从而产 生复位. 核心代码: in ...
- 去除partner页面消息 自动添加关注者的功能
某些公司希望在partner页面说些partner的坏话,可是odoo居然自动添加了partner关注,这就尴尬了.... 如果恰搭建了邮件服务器,很有可能就自动发到了客户邮箱里,等着炸锅吧.... ...
- mac 下 使用 java运行 class 文件 总是提示 “错误: 找不到或无法加载主类”的解决方法
发现问题 切换到mac平台后,突然想写点程序运行在mac下,想到mac自带java,会方便好多.不过在这过程中遇到了麻烦: 总是提示 “错误: 找不到或无法加载主类” 工程结构 查了好久,终于找到原型 ...
- Java知多少(77)日期和时间类
Java 的日期和时间类位于 java.util 包中.利用日期时间类提供的方法,可以获取当前的日期和时间,创建日期和时间参数,计算和比较时间. Date 类 Date 类是 Java 中的日期时间类 ...
- Android控件源码分析--AndroidResideMenu菜单
说明 早上看到一篇文章介绍了ResideMenu得使用,这是一个类似SlidingMenu的控件,感觉有点高尚大,反正我之前没见过,本着凑热闹的好奇心,立马clone把玩下,项目地址奉上: https ...
- swoole 定时器
timer.php <?php //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = ); swoole_timer_tick(, function ($timer ...
- STL中的map、unordered_map、hash_map
转自https://blog.csdn.net/liumou111/article/details/49252645 在之前使用STL时,经常混淆的几个数据结构,特别是做Leetcode的题目时,对于 ...