百度
360搜索
搜狗搜索

shell正则表达式菜鸟教程,shell中如果想匹配应该采用什么正则表达式详细介绍

本文目录一览: Shell编程之正则表达式(sed)

sed 是一个流编辑器,读取文件一行,存放在缓存区,

然后处理,最后输出。

sed功能很强,支持增、删、改(替换)、查。

sed [options] 'command' file(s)

与grep一样,sed在文件中查找模式时也可以使用正则表达式(ER)和各种元字符。

使用基本的元字符集^,$,*,[],[^],<>,(),{}使用扩展元字符集?,+,{},|,()

使用扩展元字符的方式 + sed -r

sed对指定进行操作,包括打印、删除、修改、追加等

sed选项参数

-e 允许多项编辑

-n 取消默认的输出

-i 直接修改对应文件

-r 支持扩展元字符

--------------------

a 在当前行后添加啊一行或多行

i 在当前行之前插入文本

c 在当前行进行替换修改

d 在当前行进行删除操作

p 打印匹配的行或指定行

n 读入下一输入行,从下一行命令进行处理!

对所选以外的所有行应用命令

h 把模式空间里的内容重定向到暂存缓存区

H 把模式空间里的内容追加到暂存缓冲区

g 取出暂存缓冲区的内容,将其复制到模式空间,覆盖该处原有内容

G 取出暂存缓冲区的内容,将其复制到模式空间,追加在原有内容后面

==================================

1)多重编辑选项e

//先删除行,然后管道给后面的sed进行替换

[root@shell ~]# sed '1,9d' passwd | sed 's#root#alex#g'

//使用-e进行多次编辑修改操作

[root@shell ~]# sed -e '1,9d' -e 's#root#alex#g' passwd

-----------------------------------------------------------------------------

2)sed的打印命令p

打印匹配halt的行

[root@shell ~]# sed -n 'halt/p' passwd

打印第二行的内容

[root@shell ~]# sed -n '2p' passwd

bin:x:1:1:bin:/bin:/sbin:nologin

打印最后一行

[root@shell ~]# sed -n '$p' passwd

---------------------------------------------------------------------------

3)sed的追加方式

给30行添加配置

[root@shell ~]# sed -i '30a listen 80;' nginx.conf

在37行添加一条记录,\t tab键(需要转义)

[root@shell ~]# sed -ri '37a \\t Listen 8080;' nginx.conf

在37行添加一条记录,\n 换行符(需要转义)

[root@shell ~]# sed -r '37a \\n LIsten 8080;' nginx.conf

---------------------------------------------------------------------------

4)sed修改命令c

指定某行进行内容替换

[root@shell ~]# sed -i '7c SELINUX=Disabled' /etc/selinux/config

使用正则匹配对应的内容,然后使用sed的c命令进行替换

[root@shell ~]# sed -i '/^ *server_name/c server_name liu.com' nginx.conf

//非交互式修改指定的配置文件

[root@shell ~]# sed -ri '/UseDNS/c UseDNS no' /etc/ssh/sshd_config

[root@shell ~]# sed -ri '/GSSAPIAuthentication/c #GSSAPIAuthentication no'

/etc/ssh/sshd_config

[root@shell ~]# sed -ri '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config

---------------------------------------------------------------------------

5)删除命令d

//指定删除第三行,但不会改变文件内容

[root@shell ~]# sed '3d' passwd

[root@shell ~]# sed '3{d}' passwd

//删除最后一行

[root@shell ~]# sed '$d' passwd

//删除所有的行

[root@shell ~]# sed '1,$d' passwd

//匹配正则进行该行删除

[root@shell ~]# sed /mail/d passwd

例子:

[root@shell ~]# mysql -uroot -p345.com -e "show databases;"

Database

infornamation_schema

mysql

performance_scheme

wordpress

world

[root@shell ~]# mysql -uroot -p345.com -e "show databases;"|sed 1d

infornamation_schema

mysql

performance_scheme

wordpress

world

===========================================

6)插入命令 i

//在文件的某一行上面添加内容

[root@shell ~]# sed -i '30i listen 80;' passwd

---------------------------------------------------------------------------

7)写文件命令w

//将匹配到的行写入到新的文件中

[root@shell ~]# sed -n '/root/w newfile' passwd

//将passwd文件的第二行写入到newfile中

[root@shell ~]# sed -n '2w newfile' passwd

---------------------------------------------------------------------------

8)获取下一行命令n

//匹配root的行,删除root行的下一列

[root@shell ~]# sed '/root/{n;d}' passwd

阅读更多 >>>  java正则表达式匹配任意字符,正则表达式怎样匹配任意字符

---------------------------------------------------------------------------

9)反向选择命令!

//除了第三行,其他全部删除

[root@shell ~]# sed -r '3!d' /etc/hosts

============(持续更新)============

sh脚本里怎样用正则表达式

sh脚本里可以调用sed,awk,grep,perl之类的命令来使用正则表达式。
如果是bash 3.0脚本,支持进程内的正则表达式,使用下面的语法:
[[ string =~ regex ]]
if [[ abcfoobarbletch =~ 'foo(bar)bl(.*)' ]] then echo The regex matches! echo $BASH_REMATCH -- outputs: foobarbletch echo ${BASH_REMATCH[1]} -- outputs: bar echo ${BASH_REMATCH[2]} -- outputs: etch fi使用这个语法的性能要比生成一个新的进程来运行grep命令优越,因为正则表达式匹配在bash进程内完成。如果正则表达式或者字符串包括空格或者shell 关键字,(诸如'*'或者'?'),就需要用引号包裹。

linux shell中w s d ^ $等常用匹配用法

正则表达式 \w \s \d \b 用法: . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白符 \d 匹配数字 等价于[0-9] \D 匹配非数字字符 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 其中,[ A-Z]表示除了不包含大写字母, 取反;^[A-Z]表示以大写字母开头

shell脚本,正则表达式,如何批量替换多个文件夹中指定字符中的指定字符

用Replace
Pioneer处理很轻松,找到")"和"("之间的内容,把"、"替换成"|"就可以了。
需要说明的是,你的括号是中文括号"()"而不是英文括号"()",所以不用转义。
以下是详细步骤:
1.
ctrl-o打开待处理txt文件
2.
ctrl-h打开replace窗口
*
在Search
for
pattern下面输入:
"(^|)).*?((|$)"(不包含左右的双引号)
*
在Replace
with
pattern下面输入:
"replace($match,'、','|')"(不包含左右的双引号)
3.
点击Replace,完成。
****************
另外,这里再给你一个纯正则表达式的版本:
把"、(?=[^)]*((|$))"替换成"|"就可以了。
你也可以在Replace
Pioneer的search
for
pattern输入"、(?=[^)]*((|$))"(无双引号),然后在replace
with
pattern输入|就可以了。

shell中如果想匹配应该采用什么正则表达式

正则表达式在各个编程语言体系中都有使用,其各个规则大概是相同的,但某些语法是根据各个语言体系自己来实现的,比如在java中判断匹配规则是通过“matches”来实现判断,则在shell中则是使用“=~”
什么是正则表达式呢?正则表达式就是能用某种模式去匹配一类字符串的公式,它是由一串字符和元字符构成字符串。所谓元字符,就是用以阐述字符表达式的内容、转换和描述各种操作信息字符。
正则表达式中的元字符表示
“.”(一个点)符号,用于匹配除换行符以外的任意字符。
[root@localhost ~]# grep 'r..t' /etc/passwd
[root@localhost ~]# grep 'r.t' /etc/passwd
1
2
3
“* ”符号,用于前一个字符0次或者多次。
[root@localhost ~]# grep 'r*t' /etc/passwd
1
“{n,m}”符号,可用于重复匹配前一个字符,但却不能精确地控制的重复次数
“{n}” 匹配前面的字符n次
[root@localhost ~]# grep 'ro\{2\}' /etc/passwd
1
“{n,}” 匹配前面的字符至少n次以上(含n次)
[root@localhost ~]# grep 'ro\{2,\}' /etc/passwd
1
“{n,m}” 匹配前面的字符n到m次
[root@localhost ~]# grep 'ro\{1,2\}' /etc/passwd
1
"^"符号 匹配的是以字符开头的行
[root@localhost ~]# grep ^root /etc/passwd
1
“$”符号 用于匹配尾部
[root@localhost ~]# grep 'r.*h$' /etc/passwd
[root@localhost ~]# grep 'r.*h' /etc/passwd
1
2
"[]"符号 用于匹配方括号内出现的任意字符
“\”符号 用于转义字符
“<”符号和“>”符号 用于界定单词的左边界和右边界
“\d”符号 匹配一个数字,等价于[0-9] 使用grep匹配这种正则表达式时可能会遇到无法匹配的问题
#成功匹配
[root@localhost ~]# echo 123|grep [0-9]
123
#并未匹配
[root@localhost ~]# echo 123|grep "\d"
#匹配成功 这是因为“\d”是一种Perl兼容模式的表达式,又称作 PCRE,要想使用这种模式的匹配符,需要加上-P参数
[root@localhost ~]# echo 123|grep -P "\d"
123
1
2
3
4
5
6
7
8
“\b”符号 匹配单词的边界
“\B”符号 匹配非单词的边界
“\w”符号 匹配字母、数字和下划线,等价于[A-Za-z0-9]
“\w”符号 匹配非字母、非数字和非下划线,等价于[^A-Za-z0-9]
“\n” 符号 匹配一个换行符
“\r”符号 匹配一个回车符
“\t”匹配一个制表符
“\f”匹配一个换页符
“\s”匹配任何空白字符
“\S”匹配任何非空白字符
正则表达式还能表示电话号码,身份证号码,域名格式,邮箱格式等等,都是根据元字符进行拼装组装,就如英语单词千千万都是用字母组成的一样,用的时候要根据各个规则进行灵活处置。
利用正则表达式怎么截取字符串呢?
expr - 求一个表达式的值
可以运算加减乘除,俨然是个多功能计算器,字符串表达式的优先级高于数值表达式和逻辑关系表达式。
运算有很多,本次只针对字符串截取来几个小demo
‘STRING : REGEX’
执行模式匹配。两端参数会转换为字符格式,且第二个参数被视为正则表达式(GNU基本正则),它默认会隐含前缀"^"。随后将第一个参数和正则模式做匹配。
如果匹配成功,且REGEX使用了’(‘和’)’,则此表达式返回匹配到的,如果未使用’(‘和’)’,则返回匹配的字符数。
如果匹配失败,如果REGEX中使用了’(‘和’)’,则此表达式返回空字符串,否则返回为0。
只有第一个’(…)‘会引用返回的值;其余的’(…)‘只在正则表达式分组时有意义。
在正则表达式中,’+’,’?‘和’|'分表代表匹配一个或多个,0个或1个以及两端任选其一的意思。
#返回匹配的个数
[root@localhost ~]# expr aaa : 'a\+'
3
#返回匹配的内容
[root@localhost ~]# expr abc : 'a\(.\)c'
b
#返回匹配的内容
[root@localhost ~]# expr service-core-0.0.1-SNAPSHOT.jar : '\(.*[0-9]\)'
#返回长度
[root@localhost ~]# expr length 'length test is length'
21
#返回截取的长度
[root@localhost ~]# expr substr abcde 2 4
bcde
#加分运算 记得要有空格,不然会原样输出
[root@localhost ~]# expr 1 + 2
3
#除发运算
[root@localhost ~]# expr 12 / 2
6
#求模运算
[root@localhost ~]# expr 12 % 5
2
#乘法运算 *作为特殊字符要进行转译
[root@localhost ~]# expr 12 \* 5
60
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
对于怎么判断这个值是否符合正则表达式则用
#注意不能添加符号,只写表达式即可,添加符号会产生错误
if [[ $file =~ .jar$ ]]
then
echo "true"
else
echo false
fi
1
2
3
4
5
6
7
以上是shell中使用正则表达式所引出来的,不会的多去查,Linux命令就是那么多,使用多了也就记住了,有人说Linux是积沙成塔的过程,慢慢积累,多看帮助文档, info、man用起来。

阅读更多 >>>  java正则表达式判断特殊字符,Java 判断以2位数字+特定字母开头的字符串的正则表达式怎么写?

在linux的shell语言中,怎样用正则表达式来截取字符串?

str=""
user=`echo $str | awk 'BEGIN'`
id=`echo $str | awk 'BEGIN'`
addr=`echo $str | awk -F? ''`
echo "a=1 b=2 c=3"|sed -e 's/ /=/g'|awk -F= '{print $2 $4 $6}'
下面这个更准确
echo "a=1 b=2 c=3"|sed 's/[[:space:]]\+/=/g'|awk -F= '{print $2 $4 $6}'
echo "a=abc b=bcd c=cde" | sed 's/=/ /g' | awk '{print $2,$4,$6}'
perl -le 'print $_ for split /\w=/, "a=1 b=2 c=3"'

shell脚本编程中expr模式匹配问题,正则表达式中的?

正则表达式了解一下就知道了,这个是匹配正、负整数的一个表达式,并且允许 0 出现在前面的数字。可以用下面的语句做测试:
[seesea@UC ~]$ if expr "-3" : '-\?[0-9]\+$' >/dev/null; then echo "match OK"; fi;
match OK
[seesea@UC ~]$
[seesea@UC ~]$ if expr "3" : '-\?[0-9]\+$' >/dev/null; then echo "match OK"; fi;
match OK
[seesea@UC ~]$
[seesea@UC ~]$ if expr "03" : '-\?[0-9]\+$' >/dev/null; then echo "match OK"; fi;
match OK

正则表达式匹配及使用案例

摘自菜鸟官网正则表达式教程: https://www.runoob.com/regexp/regexp-intro.html
基本模式匹配 一切从最基本的开始。模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如: ^once 这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串。例如该模式与字符串"once upon a time"匹配,与"There once was a man from NewYork"不匹配。正如如^符号表示开头一样, 这个模式与"Who kept all of this cash in a bucket"匹配,与"buckets"不匹配。字符 ^ 和 只匹配字符串"bucket"。如果一个模式不包括^和 尽管[a-z]代表26个字母的范围,但在这里它只能与第一个字符是小写字母的字符串匹配。 前面曾经提到^表示字符串的开头,但它还有另外一个含义。当在一组方括号里使用 ^ 时,它表示"非"或"排除"的意思,常常用来剔除某个字符。还用前面的例子,我们要求第一个字符不能是数字: [ 0-9][0-9] 与任何两个字符的、以数字5结尾和以其他非"新行"字符开头的字符串匹配。模式 . 可以匹配任何字符串,除了空串和只包括一个"新行"的字符串。 PHP的正则表达式有一些内置的通用字符簇,列表如下: 字符簇 描述 [[:alpha:]] 任何字母 [[:digit:]] 任何数字 [[:alnum:]] 任何字母和数字 [[:space:]] 任何空白字符 [[:upper:]] 任何大写字母 [[:lower:]] 任何小写字母 [[:punct:]] 任何标点符号 [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]
确定重复出现 到现在为止,你已经知道如何去匹配一个字母或数字,但更多的情况下,可能要匹配一个单词或一组数字。一个单词有若干个字母组成,一组数字有若干个单数组成。跟在字符或字符簇后面的花括号({})用来确定前面的内容的重复出现的次数。 字符簇 描述 ^[a-zA-Z_] 所有的3个字母的单词 ^a aaaa ^a{2,4} a,aa或aaa ^a{2,} // 所有包含一个以上的字母、数字或下划线的字符串 ^[1-9][0-9]{0,} // 所有的整数 ^[-]?[0-9]+.?[0-9]+ )。下面你将知道能够使用的更为简单的方法。 特殊字符 ? 与 {0,1} 是相等的,它们都代表着: 0个或1个前面的内容 或 前面的内容是可选的 。所以刚才的例子可以简化为: ^-?[0-9]{1,}.?[0-9]{1,} // 所有包含一个以上的字母、数字或下划线的字符串 ^[1-9][0-9]* // 所有的整数 ^[-]?[0-9]+(.[0-9]+)?$ // 所有的浮点数
2.手机号是否是11位数字:String regex = "[0-9]{11}"; 或 String regex = "\d{11}";
3.字符串是否是中文
4.字符串是否含有特殊字符:String regex = "^[\sA-Za-z0-9\u4e00-\u9fa5()(),,_—-]+$";
5. 字符串是否包含某个特定中文:String regex = "^[\x{6d4b}]{0,1}[\x{8bd5}]{0,1}$";
中文转Unicode网站:[ http://tool.chinaz.com/tools/unicode.aspx] 中文匹配字符串转码再进行匹配方法来自博客:[ https://www.cnblogs.com/shiwaitaoyuan/p/6964603.html]
6.用replaceAll 配合正则替换字符串中的值

Shell基本脚本命令使用教程

1、本地变量:用户私有变量,只有本用户可以访问,保存在家目录的 .bash_profile、.bashrc文件中
2、全局变量:所有用户都可以使用,保存在 /etc/profile 文件中
3、用户自定义变量:用户自定义,比如脚本中的变量
定义变量格式: 变量名=值 (=两边不能有空格)
字符串用单引号或者双引号引起来

shell支持正则表达式的常见命令:grep、sed、awk。

sed 是一个行(流)编辑器,非交互式的对文件内容进行增删改查操作

awk 能够集过滤、提取、运算为一体,它的工作方式是读取数据,将每一行数据视为一条记录,每条记录以字段分隔符分成若干字段,然后输出各个字段的值。平行命令还有 gawk、pgawk、dgawk。

Shell脚本:${...}在字符串中的多种用法

1、${var}

限定变量。

如果一个变量名A是另一个变量名AB的前部分,那么,如果要在AB相连时,要得到A的值,就必须使用${var}限定。

如果变量名不会产生歧义时(即独立的变量名),${var}与$var没有任何区别。

var="hello"

var_01="hello01"

echo? $var $var_01 ${var}_01

>>> hello hello01 hello_01

2、${#var}

得到变量var的长度

var="hello"

echo ${#var}

>>> 5

阅读更多 >>>  python正则表达式教程,Python 正则表达式匹配两个字符之间的字符

3、${var#}

删除变量首部的字符(串),

"#"后面的可以是字面串,也可以是正则表达式(惰性匹配)。

var="hello"

echo ${var#he}

>>> llo

var="/res_pos/path/from/something"

echo ${var#/}

>>> res_pos/path/from/something? ? # 删除第一个"/"

echo ${var#/*/}

>>> path/from/something? # 删除首部匹配"/*/"的串,即"/res_pos/"

4、${var##}

删除变量首部的字符(串),

只是,当使用2个"##"时,匹配是贪婪的(贪婪匹配,也就是尽可能多的匹配)。

echo ${var##/*/}

>>> something? # 删除首部匹配"/*/"的串,即"/res_pos/path/from/"。

5、${var%}

删除变量尾部的字符(串),

"%"后面的可以是字面串,也可以是正则表达式(惰性匹配)。

var="hello"

echo ${var%llo}

>>> he

var="~/res_pos/path/from/something"

echo ${var%/*}

>>> ~/res_pos/path/from? ? # 删除尾部的"/something"

6、${var%%}

删除变量尾部的字符(串),

只是,当使用2个"%%"时,匹配是贪婪的(对应于第4条)

var="~/res_pos/path/from/something"

echo ${var%/*}

>>> ~? ? # 删除第一个的"/"后的所有所有内容(包括"/"),贪婪匹配中,"/*"就是"/"后的所有字符串

7、${var::}

跟python的切片概念相似,取变量var的起始索引,

指定长度的子串(${var:索引:长度})。

var="~/res_pos/path/from/something"

echo ${var:0:5}

>>> ~/res

echo ${var:1:5}

>>> /res_? ? ? # 可见,字符串的索引是从0开始的

echo ${var::5}

>>> ~/res? ? ? # 省略"索引",默认为从0开始

echo ${var:1:}

>>>? ? ? ? ? ? ? # 省略"长度",默认长度为0,所以输出为空

8、${var//}

字符串替换。

将var中的字符串A替换成字符串B(${var/A/B})。

var="hello world"

echo ${var/hello/hi}

>>> hi world? ? ? # 字符串"hello"替换成了"hi"

echo ${var/l/X}

>>> heXlo world? # 第一个"l"替换成了"X"

9、${var///}

字符串替换,

与第8点相同,只不过,现在是将所有出现的串A替换成串B(${var//A/B})。

var="hello world"

echo ${var//l/X}

>>> heXXo worXd? # 所有的"l"都替换成了"X"

10、${var/#/}

替换字符串首部的串A为串B,

(${var/#A/B}),与第8点不同的是,这里只替换首部的串A。

var="hello world. hello baby."

echo ${var//h/H}

>>> Hello world. Hello baby.? ? # 将所有"h"替换成了"H"

echo ${var/#h/H}

>>> Hello world. hello baby.? ? # 将首部的"h"替换成了"H"

echo ${var/e/E}

>>> hEllo world. hello baby.? ? # 将第一个出现的"e"替换成了"E"

echo ${var/#e/E}

>>> hello world. hello baby.? ? # 首字符不是"e",所以没有进行任何替换,原样输出。

11、${var/%/}

替换字符串尾部的串A为串B,

(${var/%A/B}),与第10点相似,只是这是处理的是字符串尾。

var="hello hello"

echo ${var/%o/END}

>>> hello hellEND? ? # 将尾部的字符"o",替换成了"END"。

网站数据信息

"shell正则表达式菜鸟教程,shell中如果想匹配应该采用什么正则表达式"浏览人数已经达到21次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:shell正则表达式菜鸟教程,shell中如果想匹配应该采用什么正则表达式的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!