Rumah hujung hadapan web tutorial js 在linux里使用正则表达式详解

在linux里使用正则表达式详解

Mar 30, 2018 am 10:47 AM
linux ungkapan Penjelasan terperinci

这次给大家带来在linux里使用正则表达式详解,在linux里使用正则表达式的注意事项有哪些,下面就是实战案例,一起来看一下。

前言

正则表达式应用广泛,在绝大多数的编程语言都可以完美应用,在Linux中,也有着极大的用处。

使用正则表达式,可以有效的筛选出需要的文本,然后结合相应的支持的工具或语言,完成任务需求。

在本篇博客中,我们使用grep/egrep来完成对正则表达式的调用,其实也可以使用sed等工具,但是sed的使用极大的需要正则表达式,为了在后面sed篇的书写,就只能这样排序了,有需要的朋友可以把这两篇一起来看。

正则表达式的类型

正则表达式可以使用正则表达式引擎实现,正则表达式引擎是解释正则表达式模式并使用这些模式匹配文本的基础软件。

在Linux中,常用的正则表达式有:

- POSIX 基本正则表达式(BRE)引擎

- POSIX 扩展正则表达式(BRE)引擎

基本正则表达式的基本使用

环境文本准备

[root@service99 ~]# mkdir /opt/regular
[root@service99 ~]# cd /opt/regular
[root@service99 regular]# pwd
/opt/regular
[root@service99 regular]# cp /etc/passwd temp_passwd
Salin selepas log masuk

纯文本

纯文本可以完全匹配对应的单词,需要注意的有正则表达式模式严格区分大小写。

//grep --color 主要是可以将匹配到的文本高亮显示,这样便于观察效果
[root@service99 regular]# grep --color "root" temp_passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
Salin selepas log masuk

在正则表达式中,不必局限于完整的单词,所定义的文本出现在数据流的任意位置,正则表达式都将匹配。

[root@service99 regular]# ifconfig eth1 | grep --color "add"
eth1   Link encap:Ethernet HWaddr 54:52:01:01:99:02 
     inet addr:192.168.2.99 Bcast:192.168.2.255 Mask:255.255.255.0
     inet6 addr: fe80::5652:1ff:fe01:9902/64 Scope:Link
Salin selepas log masuk

当然也不必局限于单独的单词,也可以在文本字符串中出现空格和数字。

[root@service99 regular]# echo "This is line number 1" | grep --color "ber 1"
This is line number 1
Salin selepas log masuk

特殊字符

在正则表达式模式中使用文本字符串时,有一个问题需要注意。

在正则表达式中定义文本字符串时有几个例外,正则表达式赋予了它们特殊的含义,如果在文本中使用这些特殊字符,有可能得不到预期的效果。

正则表达式认可的特殊字符:

复制代码 代码如下:


.*[]^${}+?|()

如果想要使用这些特殊字符作为普通的文本字符,就需要转义(escape)它,即是在该字符前添加一个特殊字符,向正则表达式引擎说明:它应该将下一个字符解释为普通文本字符。

实现该功能的特殊字符是:“\”反斜杠字符

[root@service99 regular]# echo "This cat is $4.99" //双引号不会屏蔽特殊符号,所以系统会读取变量4.99的值,然而当前系统并没有该变量,就显示为空  
This cat is .99
[root@service99 regular]# echo "This cat is \$4.99"  //使用"\"转义$
This cat is $4.99
[root@service99 regular]# echo 'This cat is \$4.99'  //单引号屏蔽元字符$
This cat is \$4.99
[root@service99 regular]# echo 'This cat is $4.99' 
This cat is $4.99
[root@service99 regular]# cat price.txt 
This price is $4.99
hello,world!
$5.00
#$#$
This is "\".
[root@service99 regular]# grep --color '\\' price.txt 
This is "\".
Salin selepas log masuk

定位符

从头开始

脱字符(^)尖角号定义从数据流中文本行开头开始的模式。

[root@service99 regular]# grep --color '^h' price.txt  //以字母h开头的行
hello,world!
[root@service99 regular]# grep --color '^$' price.txt //无输出结果,由于没有屏蔽特殊含义
[root@service99 regular]# grep --color '^\$' price.txt   //以$符号开头的行
$5.00
[root@service99 regular]# echo "This is ^ test. " >> price.txt 
[root@service99 regular]# cat price.txt 
This price is $4.99
hello,world!
$5.00
#$#$
This is "\".
This is ^ test. 
[root@service99 regular]# grep --color '^' price.txt //直接使用会显示所有的内容
This price is $4.99
hello,world!
$5.00
#$#$
This is "\".
This is ^ test. 
[root@service99 regular]# grep --color '\^' price.txt //单独使用,并在最前面时需要屏蔽
This is ^ test. 
[root@service99 regular]# grep --color 'is ^' price.txt //符号不在最前面时,无需屏蔽,直接使用即可
This is ^ test.
Salin selepas log masuk

查找结尾

美元符号$特殊字符定义结尾定位,在文本模式之后添加这个特殊字符表示数据行必须以此文本模式结束。

[root@service99 regular]# grep --color '\.$' price.txt //“.”在正则表达式中也有特殊含义,请屏蔽,具体的请往下看
This is "\".
[root@service99 regular]# grep --color '\. $' price.txt //由于我在输入的时候,多加了一个空格,所以各位需要慎重和小心
This is ^ test.           //在正则表达式中,空格作为字符计。
[root@service99 regular]# grep --color '0$' price.txt 
$5.00
[root@service99 regular]# grep --color '9$' price.txt 
This price is $4.99
Salin selepas log masuk

联合定位

比较常用的就是“^$” 表示空行

结合“^#”,由于#在Linux代表注释

输出该文本的有效配置

[root@service99 regular]# cat -n /etc/vsftpd/vsftpd.conf | wc -l
121
[root@service99 regular]# grep -vE '^#|^$' /etc/vsftpd/vsftpd.conf  //v表示反选,E表示支持扩展正则“|”是扩展正则的符号,往下看,后面有
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
Salin selepas log masuk

字符出现范围

{n,m} //前一个字符出现了n到m次

{n,} //前一个字符出现了n次以上

{n} //前一个字符出现了n次

[root@service99 regular]# grep --color "12345\{0,1\}" price.txt 
1234556
[root@service99 regular]# grep --color "12345\{0,2\}" price.txt 
1234556
Salin selepas log masuk

点字符

点特殊字符用于匹配除换行符之外的任意单个字符,但点字符必须匹配一个字符;如果在圆点位置没有字符,那么模式匹配失败。

[root@service99 regular]# grep --color ".s" price.txt 
This price is $4.99
This is "\".
This is ^ test. 
[root@service99 regular]# grep --color ".or" price.txt 
hello,world!
Salin selepas log masuk

字符类

字符类可以定义一类字符来匹配文本模式中的某一位置。如果在字符类中的某一字符在数据流中,就和模式匹配。
为定义字符类,需要使用方括号。应该将要包括在该类中的所有字符用方括号括起来,然后模式中使用整个字符类,就像任意的其他通配符一样。

[root@service99 regular]# grep --color "[abcdsxyz]" price.txt 
This price is $4.99
hello,world!
This is "\".
This is ^ test. 
[root@service99 regular]# grep --color "[sxyz]" price.txt 
This price is $4.99
This is "\".
This is ^ test. 
[root@service99 regular]# grep --color "[abcd]" price.txt 
This price is $4.99
hello,world!
[root@service99 regular]# grep --color "Th[ais]" price.txt //Th 后的第一个字符在【ais】中匹配的
This price is $4.99
This is "\".
This is ^ test. 
[root@service99 regular]# grep -i --color "th[ais]" price.txt //-i 表示不区分大小写
This price is $4.99
This is "\".
This is ^ test.
Salin selepas log masuk

如果不能确定某个字符的大小写,就可以使用该模式:

[root@service99 regular]# echo "Yes" | grep --color "[yY]es"  []内字符顺序没有影响
Yes
[root@service99 regular]# echo "yes" | grep --color "[Yy]es"
yes
Salin selepas log masuk

在单个表达式内可以使用多个字符类:

[root@service99 regular]# echo "Yes/no" | grep "[Yy][Ee]"
Yes/no
[root@service99 regular]# echo "Yes/no" | grep "[Yy].*[Nn]" //*在正则表达式中的用法,请往下看
Yes/no
Salin selepas log masuk

字符类对数字同样支持:

[root@service99 regular]# echo "My phone number is 123456987" | grep --color "is [1234]"
My phone number is 123456987
[root@service99 regular]# echo "This is Phone1" | grep --color "e[1234]"
This is Phone1
[root@service99 regular]# echo "This is Phone1" | grep --color "[1]"
This is Phone1
Salin selepas log masuk

字符类还有一种极为常见的用途是解析可能拼错的单词:

[root@service99 regular]# echo "regular" | grep --color "r[ea]g[ua]l[ao]"
regular
Salin selepas log masuk

否定字符类

用于查找不在该字符类中的字符,只需在字符类范围的开头添加脱字符(^).

即使使用否定,字符类仍必须匹配一个字符。

[root@service99 regular]# cat price.txt 
This price is $4.99
hello,world!
$5.00
#$#$
This is "\".
this is ^ test. 
cat
car
[root@service99 regular]# sed -n '/[^t]his/p' price.txt 
This price is $4.99
This is "\".
[root@service99 regular]# grep --color "[^t]his" price.txt 
This price is $4.99
This is "\".
[root@service99 regular]# grep --color "ca[tr]" price.txt 
cat
car
[root@service99 regular]# grep --color "ca[^r]" price.txt 
cat
Salin selepas log masuk

使用范围

当你需要匹配的字符很多并且有一定规律时,可以这样:

[root@service99 regular]# cat price.txt 
This price is $4.99
hello,world!
$5.00
#$#$
This is "\".
this is ^ test. 
cat
car
1234556
911
11806
[root@service99 regular]# egrep --color '[a-z]' price.txt 
This price is $4.99
hello,world!
This is "\".
this is ^ test. 
cat
car
[root@service99 regular]# egrep --color '[A-Z]' price.txt 
This price is $4.99
This is "\".
[root@service99 regular]# grep --color "[0-9]" price.txt 
This price is $4.99
$5.00
1234556
911
11806
[root@service99 regular]# sed -n '/^[^a-Z]/p' price.txt 
$5.00
#$#$
1234556
911
11806
[root@service99 regular]# grep --color "^[^a-Z]" price.txt 
$5.00
#$#$
1234556
911
11806
[root@service99 regular]# echo $LANG  //在使用 [a-Z]时,注意LANG环境变量的值,该值若是进行修改的话,要注意修改的值的合法性
zh_CN.UTF-8 
[root@service99 regular]# LANG=en_US.UTF-8
Salin selepas log masuk

特殊字符类

用于匹配特定类型的字符。

[[:blank:]] 空格(space)与定位(tab)字符

[[:cntrl:]] 控制字符

[[:graph:]] 非空格(nonspace)字符

[[:space:]] 所有空白字符

[[:print:]] 可显示的字符

[[:xdigit:]] 十六进制数字

[[:punct:]] 所有标点符号

[[:lower:]] 小写字母

[[:upper:]] 大写字母

[[:alpha:]] 大小写字母

[[:digit:]] 数字

[[:alnum:]] 数字和大小写字母

星号

在某个字符之后加一个星号表示该字符在匹配模式的文本中不出现或出现多次

[root@service99 regular]# cat test.info 
goole
go go go
come on
goooooooooo
[root@service99 regular]# grep --color "o*" test.info 
goole
go go go
come on
goooooooooo
[root@service99 regular]# grep --color "go*" test.info 
goole
go go go
goooooooooo
[root@service99 regular]# grep --color "w.*d" price.txt   //经常与.一起使用
hello,world!
Salin selepas log masuk

扩展正则表达式

问号

问号表示前面的字符可以不出现或者出现一次。不匹配重复出现的字符。

[root@service99 regular]# egrep --color "91?" price.txt 
This price is $4.99
911
Salin selepas log masuk

加号

加号表示前面的字符可以出现一次或者多次,但必须至少出现一次,该字符若是不存在,则模式不匹配。

[root@service99 regular]# egrep --color "9+" price.txt 
This price is $4.99
911
[root@service99 regular]# egrep --color "1+" price.txt 
1234556
911
11806
Salin selepas log masuk

使用大括号

使用大括号指定对可重复的正则表达式的限制,通常称为间隔。

- m:该正则表达式正好出现m次

- m,n:该正则表达式出现最少m次,最多n次

[root@service99 regular]# echo "This is test,test is file." | egrep --color "test{0,1}"
This is test,test is file.
[root@service99 regular]# echo "This is test,test is file." | egrep --color "is{1,2}"
This is test,test is file.
Salin selepas log masuk

正则表达式实例

这里有一个实例,对基本的正则表达式进行了练习和实例。
因为正则表达式,单看概念或者理论还是比较简单的,然而在实际的使用中,却不是那么好用,一旦用好了,对效率的提升绝对时可观的。

1.过滤下载文件中包含 the 关键字

grep --color "the" regular_express.txt
Salin selepas log masuk

2.过滤下载文件中丌包含 the 关键字

grep --color -vn "the" regular_express.txt
Salin selepas log masuk

3.过滤下载文件中丌论大小写 the 关键字

grep --color -in "the" regular_express.txt
Salin selepas log masuk

4.过滤 test 或 taste 这两个单字

grep --color -En 'test|taste' regular_express.txt 
grep --color -i "t[ae]ste\{0,1\}" 1.txt
Salin selepas log masuk

5.过滤有 oo 的字节

grep --color "oo" regular_express.txt
Salin selepas log masuk

6.过滤丌想要 oo 前面有 g 的

grep --color [^g]"oo" regular_express.txt 
grep --color "[^g]oo" regular_express.txt
Salin selepas log masuk

7.过滤 oo 前面丌想有小写字节

egrep --color "[^a-z]oo" regular_express.txt
Salin selepas log masuk

8.过滤有数字的那一行

egrep --color [0-9] regular_express.txt
Salin selepas log masuk
Salin selepas log masuk

9.过滤以 the 开头的

egrep --color ^the regular_express.txt
Salin selepas log masuk

10.过滤以小写字母开头的

egrep --color ^[a-z] regular_express.txt
Salin selepas log masuk

11.过滤开头丌是英文字母

egrep --color ^[^a-Z] regular_express.txt
Salin selepas log masuk

12.过滤行尾结束为小数点.那一行

egrep --color $"\." regular_express.txt
Salin selepas log masuk

13.过滤空白行

egrep --color "^$" regular_express.txt
Salin selepas log masuk

14.过滤出 g??d 的字串

egrep --color "g..d" regular_express.txt
Salin selepas log masuk

15.过滤至少两个 o 以上的字串

egrep --color "ooo*" regular_express.txt 
egrep --color o\{2,\} regular_express.txt
Salin selepas log masuk

16.过滤 g 开头和 g 结尾但是两个 g 之间仅存在至少一个 o

egrep --color go\{1,\}g regular_express.txt
Salin selepas log masuk

17.过滤任意数字的行

egrep --color [0-9] regular_express.txt
Salin selepas log masuk
Salin selepas log masuk

18.过滤两个 o 的字串

egrep --color "oo" regular_express.txt
Salin selepas log masuk

19.过滤 g 后面接 2 到 5 个 o,然后在接一个 g 的字串

egrep --color go\{2,5\}g regular_express.txt
Salin selepas log masuk

20.过滤 g 后面接 2 个以上 o 的

egrep --color go\{2,\} regular_express.txt
Salin selepas log masuk

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

正则的位置匹配使用详解

怎样用正则来验证IPV4的地址功能

Atas ialah kandungan terperinci 在linux里使用正则表达式详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara Membuka Web.xml Cara Membuka Web.xml Apr 03, 2025 am 06:51 AM

Untuk membuka fail web.xml, anda boleh menggunakan kaedah berikut: Gunakan editor teks (seperti Notepad atau TextEdit) untuk mengedit arahan menggunakan persekitaran pembangunan bersepadu (seperti Eclipse atau NetBeans) (Windows: Notepad Web.xml; Mac/Linux: Open -A -A TextEdit Web.xml)

Empat cara untuk melaksanakan multithreading dalam bahasa c Empat cara untuk melaksanakan multithreading dalam bahasa c Apr 03, 2025 pm 03:00 PM

Multithreading dalam bahasa dapat meningkatkan kecekapan program. Terdapat empat cara utama untuk melaksanakan multithreading dalam bahasa C: Buat proses bebas: Buat pelbagai proses berjalan secara bebas, setiap proses mempunyai ruang ingatan sendiri. Pseudo-Multithreading: Buat pelbagai aliran pelaksanaan dalam proses yang berkongsi ruang memori yang sama dan laksanakan secara bergantian. Perpustakaan multi-threaded: Gunakan perpustakaan berbilang threaded seperti PTHREADS untuk membuat dan mengurus benang, menyediakan fungsi operasi benang yang kaya. Coroutine: Pelaksanaan pelbagai threaded ringan yang membahagikan tugas menjadi subtask kecil dan melaksanakannya pada gilirannya.

Bolehkah penterjemah Python dipadam dalam sistem Linux? Bolehkah penterjemah Python dipadam dalam sistem Linux? Apr 02, 2025 am 07:00 AM

Mengenai masalah menghapuskan penterjemah python yang dilengkapi dengan sistem Linux, banyak pengagihan Linux akan memasang semula penterjemah python apabila dipasang, dan ia tidak menggunakan pengurus pakej ...

Untuk apa yang paling baik digunakan oleh Linux? Untuk apa yang paling baik digunakan oleh Linux? Apr 03, 2025 am 12:11 AM

Linux paling baik digunakan sebagai pengurusan pelayan, sistem tertanam dan persekitaran desktop. 1) Dalam pengurusan pelayan, Linux digunakan untuk menjadi tuan rumah laman web, pangkalan data, dan aplikasi, menyediakan kestabilan dan kebolehpercayaan. 2) Dalam sistem tertanam, Linux digunakan secara meluas di rumah pintar dan sistem elektronik automotif kerana fleksibiliti dan kestabilannya. 3) Dalam persekitaran desktop, Linux menyediakan aplikasi yang kaya dan prestasi yang cekap.

Bagaimana keserasian Debian Hadoop Bagaimana keserasian Debian Hadoop Apr 02, 2025 am 08:42 AM

Debianlinux terkenal dengan kestabilan dan keselamatannya dan digunakan secara meluas dalam persekitaran pelayan, pembangunan dan desktop. Walaupun kini terdapat kekurangan arahan rasmi mengenai keserasian langsung dengan Debian dan Hadoop, artikel ini akan membimbing anda tentang cara menggunakan Hadoop pada sistem Debian anda. Keperluan Sistem Debian: Sebelum memulakan konfigurasi Hadoop, sila pastikan sistem Debian anda memenuhi keperluan operasi minimum Hadoop, yang termasuk memasang Java Runtime Environment (JRE) dan pakej Hadoop. Langkah Penyebaran Hadoop: Muat turun dan Unzip Hadoop: Muat turun versi Hadoop yang anda perlukan dari laman web Apachehadoop rasmi dan selesaikannya

Adakah saya perlu memasang klien oracle semasa menyambung ke pangkalan data oracle menggunakan GO? Adakah saya perlu memasang klien oracle semasa menyambung ke pangkalan data oracle menggunakan GO? Apr 02, 2025 pm 03:48 PM

Adakah saya perlu memasang klien oracle semasa menyambung ke pangkalan data oracle menggunakan GO? Semasa membangun di GO, menyambung ke pangkalan data Oracle adalah keperluan biasa ...

Tidak dapat log masuk ke mysql sebagai akar Tidak dapat log masuk ke mysql sebagai akar Apr 08, 2025 pm 04:54 PM

Sebab utama mengapa anda tidak boleh log masuk ke MySQL sebagai akar adalah masalah kebenaran, ralat fail konfigurasi, kata laluan tidak konsisten, masalah fail soket, atau pemintasan firewall. Penyelesaiannya termasuk: periksa sama ada parameter pengikat di dalam fail konfigurasi dikonfigurasi dengan betul. Semak sama ada kebenaran pengguna root telah diubahsuai atau dipadam dan ditetapkan semula. Sahkan bahawa kata laluan adalah tepat, termasuk kes dan aksara khas. Semak tetapan dan laluan kebenaran fail soket. Semak bahawa firewall menyekat sambungan ke pelayan MySQL.

See all articles