Shell正则表达式学习笔记,Linux命令学习计划
分类:微服架构

Linux命令学习计划【sed】,linux命令sed

引言:

Sed命令是linux里用于文本行处理的命令。

为了便于说明,我在/usr/dict下创建了字典words并以此作为演示模板

先用nl 打印下words内容:

图片 1

*打印篇:

Q1:如何打印某一行数据?

如果要打印第一行数据,则使用:

sed –n 1p words

如果要打印最后一行数据,则使用:

sed –n ‘$p’ words

注意的是:如果是某个具体的行号,并不需要加引号,如果含’$’等特殊字符或某些模式匹配的时候需要加引号。

你会想,仅仅是能看到头行和结尾行的数据,有什么稀奇的?试想如果一个文本,比如一个‘庞大’的log,仅仅是要看第10000行的数据,怎么去看?如果一页页去找会很麻烦,同时打开很大的文件去查找也是不现实的。这时用sed命令就非常方便。看!

sed -n 10000p words

 

Q2:打印连续的行?

打印连续行只要这么写:

sed –n 2,6p words

表示打印2-6行的数据

打印从第5行道结尾的数据,这么写:

sed –n ‘5,$p’ words

 

Q2:怎样打印不连续的行?

比如我想只打印第5、8、10数据:

图片 2

这里用到了“-e”参数,每个-e 后面都可以表达式+执行动作,sed按顺序执行。

Q3:打印包含指定字符(模式匹配)的行?

当我们在一个庞大的文档中查找数据时,往往不知道要查找的东西在哪行,我们知道的可能是某行数据包含什么字符串或者符合什么样的规律,这时要用到模式匹配,把要匹配的格式放在两个’/’之间,如下:

/pattern-text/

。比如要查看含’abc’的行:

sed –n /abc/p words

 

要查看包含3个连续相同字符的行:

sed –n ‘/(w)11/p’ words

 图片 3

 

*新增篇

Q1:在某一行后添加新行要怎么做?

比如sedtest下有三个脚本: 

图片 4

写这些脚本的人都是一个作者,作者写完后发现有必要在源码中留下自己的大名。于是他这样做:

sed –in ‘1a #author is elvis’ sh01.sh sh02.sh sh03.sh

加上-i表示修改的内容直接‘写回’文档而不在屏幕输出

1a表示在第一行后插入新行,这是因为第一行往往是’#!’行。也可以把1a换为2i,表示在第二行前插入一行(当然默认了一个脚本文件至少有2行)

图片 5

加上大名后作者还不满意,想一次性地把版本和日期信息加上并且加上一行注释‘This is for test’。sed也能一次性地添加多行,可以直接在后面添加换行符n,也可以通过在shell中输入【+回车】分开每行的输入:

图片 6

除此之外,sed还可以读取一个文本文件的内容并追加到指定行的后面:

比如要在3个脚本文件末尾追加sh04.sh的内容:

sed –in ‘$r sh04.sh’ sh01.sh sh02.sh sh03.sh

sh04.sh中写了很多内容,包括定义了一些方法,比如sh04.sh中定义了bomb方法。通过上面的命令就可以把这个方法插入了3个脚本的末尾。

图片 7

*删除篇

利用sed命令可以轻松删除文本文件中指定的行。

用法是:sed n1,n2d textfilepath;或sed ‘/pattern-text/d’ textfilepath

比如:我想查看一个shell脚本,但是不想看注释,同时不打印空行,可以这么做;

图片 8

细心的你可能会发现我少加了”-n”参数,在打印和新增的时候通常要加上”-n”参数,因为”-n“表示是只输出匹配的行。

我们改写上面的案例,看下打印如果不加这项参数会怎样。

图片 9

咦?怎么还是把所有的打印出来了?而且还重复打印了!

这是因为原始行在非安静模式下是会输出,显示不符合我们想要的结果。加上”-n”就”安静“多了!

图片 10

由于删除的动作,是显示删除后原始行的数据,所以不需要加”-n“,如果加了将看不到任何效果。

图片 11

*修改篇

sed命令可以修改一个文本文档的数据。

1、  整行取代

sed n1,n2c textfilepath

图片 12

比如我要把words中的空行用三个’#’代替,可以这么做:

图片 13

2、  局部修改

正则表达式是个利器,它成就了像sed,awk这样的强大的文本工具。sed可以通过匹配修改一个文本文档中任何你想修改的地方,比如:

words中每一行单词首字母都不是大写,通过sed命令就可以完善这一点,看!

图片 14

比如,我想把words中每个全数字的单词都加上”0x“前缀:

图片 15

*番外篇

1、小结:

通过上面的介绍,总结sed的用法规律,

sed [–nrfe] + 正则表达式或行号+执行动作 + 文件,执行动作用a,c,i这类的字符标识。

同时sed也是一个管道命令,所谓管道(pipe)命令,简单的理解是不仅可以产生数据,也可以接收和处理别的命令产生的数据。

比如一个文档中有很多重复行,用sed定位行时没必要把所有的重复行打印出来,这时可以先用uniq命令去除重复行,然后把去除重复后的数据交给sed处理:

图片 16

2、扩展:

-e、-f、-r参数的含义和使用

有些人对sed中nrfe这4个参数不理解,其实理解它们不难,手册+实践就搞定。

-n上面已经说明了,这里略过。

先用man sed看下参数的说明:

图片 17

可以看到-e和-f的作用都是一样,都是向命令行添加执行动作,只不过-e是直接在后面添加表达式,-f是指定一个脚本文件。

在打印篇已经看到了-e的用法,对!一条sed命令可以连续接好几个-e exp的,它告诉我们一条sed命令其实做很多事情。

比如修改篇中,我想同时实现转换大写字母和添加前缀的功能,就可以用-e参数实现:

图片 18

-f的作用就是指定一个写满执行动作的文件:

比如我写了一个sed_print文件,里面写了我要打印某几行的命令:

图片 19

我只要在sed命令后指定这个文档就可以打印第2行、第5行、第8行的数据,是不是很方便

图片 20

-r的作用是应用扩展的正则表达式

如果不加这个参数默认使用的基本的正则表达式,这样有些语法是无法使用的,比如”+“和”?”。看看下面这个对比就知道了:

比如words不是按行分隔,而是按空格分隔,我想使其中的每个英文单词的首字母大写:

图片 21

图片 22

上面的正则表达式用到了“+“,所以必须加”-r“参数才可,否则就匹配不了,这也是我们在用sed命令时要十分小心的地方。

 

扩展的正则表达式到底扩展了哪些东西呢?

除了上面讲的+和?外还有:

1、{m,n}字符次数匹配

2、|,OR匹配

图片 23

3、(),分组和反向引用

图片 24

 

引言: Sed命令是linux里用于文本行处理的命令。 为了便于说明,我在/usr/dict下创建了字典words并以此...

测试方法:

标题:sed命令的使用

正规表示法(或称为常规表示法)是透过一些特殊字符的排列,用以搜寻/取代/删除一列或多列文字字符串, 简单的说,正规表示法就是用在字符串的处理上面的一项『表示式』。正规表示法并不是一个工具程序, 而是一个字符串处理的标准依据,如果您想要以正规表示法的方式处理字符串,就得要使用支持正规表示法的工具程序才行, 这类的工具程序很多,例如 vi, sed, awk 等等。

[    expression    ]:命令测试法

作用:sed(stream editer)是以行为单位处理文本数据,可以对数据按行进行选取(显示打印)、替换、删除和新增等功能。

一、正则表达式是什么?

[ [ expression ] ]:关键字测试法

工作流程:sed是一个流编辑器,它可以对从标准输入流中得到的数据进行处理,然后把处理以后得到的结果输出到标准输出,而标准输出通常关联到终端屏幕,因此处理后的结果也会显示到屏幕上。当然,也可以把标准输出重定向到文件,这样处理后的结果就会保存在磁盘文件中。

正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。

test expression

一、用法

二、正则表达式与通配符

bash中常用的条件测试有有一种:

       sed [-nefr] [动作]

1. 正则表达式

    整数测试:

       参数:

用来在文件中匹配符合条件的字符串,正则表达式是“包含匹配”。grep、awk、sed等命令可以支持正则表达式。

             -gt:大于

     -n:使用安静模式,取消自动打印模式空间。在一般来自STDIN的数据一般都会被列出到屏幕上,但如果加上-n参数后,则只有经过sed处理的那一行才会被列出来

2. 正则表达式元字符

             -le:小于等于

         -e:直接在命令行模式上进行sed的动作编辑

正则表达式是通过元字符来进行字符串匹配的,具体请参考:

             -ne:不等于

         -f:直接将sed动作写到一个文件内,-f filename可以执行filename内的sed动作

3. 通配符

             -eq:等于

             -i:直接修改读的文件内容,而不是由屏幕输出

用来匹配符合条件的文件名,通配符是“完全匹配”。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。

             -ge:大于等于

        动作说明:

4. 通配符包括

             -lt:小于

    1. [n1[n2]] function

* 匹配任意字符

eg

        1.1 n1,n2一般代表选择进行动作的行数,10,20代表动作在10,20行间执行。如果不指定n1,n2,则表示后面的[动作]命令作用于与所有的行

? 匹配任意一个字符

      INT1=63

     1.2 除了用数字选择进行动作的行的范围,也可以用正则表达式,选择进行操作的行的范围

 [] 匹配中括号中的任意一个字符

      INT2=77

        例如:打印显示所有以"#"开头的行 sed -n '/^#/p' filename

三、cut命令

      [   $INT1 -eq $INT2   ]

      1.3 在进行替换命令的时候,一般需要用正则表达式所有行进行模式匹配,只有匹配成功的行,才会执行相应的动作操作

cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

      [ [  $INT1  -eq $INT2 ] ]

        2. function有下面这参数:

1. 常用参数

      test $INT1 -eq $INT2

     [1] a : 新增

-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。

     文件测试:

     [2] c : 替换,c后面可以接字符串,这些字符串可以替换n1,n2之间的行

2. 示例1:打印出用制表符分割的文件的某一行

       -e FILE:测试文件是否存在

     [3] d: 删除

[root@localhost shell]# cat student.txt 
ID   Name  Gender Mark
1    ming  F    85
2    zhang  F    70
3    wang  M    75
4    li   M    90
[root@localhost shell]# cut -f 4 student.txt 
Mark
85
70
75
90 

       -f  FILE:测试文件是否为普通文件

     [4] i: 插入,i之后可接字符串,这些字符串会在新的一行出现

3. 示例2:打印csv文件的某一行

       -d FILE:测试指定路径是否为目录

     [5] p: 打印,通常会和-n一起运行

[root@localhost shell]# cat student.csv 
ID,Name,Gender,Mark
1,ming,F,85
2,zhang,F,70
3,wang,M,75
4,li,M,90
[root@localhost shell]# cut -d "," -f 4 student.csv 
Mark
85
70
75
90 

       -r  FILE:测试指定文件对当前用户来讲是否可读

     [6] s: 替换

4. 示例3:打印一个字符串的第几个字符

       -w FILE:测试指定文件对当前用户来讲是否可写

二、实例

[root@localhost shell]# echo "abcdef" | cut -c 3
c 

       -x  FILE:测试指定文件对当前用户来讲是否可执行

       例1:以行为单位的删除操作:

5. 示例4:截取中文字符的某一个文字

测试脚本是否有语法错误:

       命令:nl test.da | sed '2,5d'

[root@localhost shell]# echo "Shell编程" | cut -nb 1
S
[root@localhost shell]# echo "Shell编程" | cut -nb 2
h
[root@localhost shell]# echo "Shell编程" | cut -nb 3
e
[root@localhost shell]# echo "Shell编程" | cut -nb 4
l
[root@localhost shell]# echo "Shell编程" | cut -nb 5
l
[root@localhost shell]# echo "Shell编程" | cut -nb 8
编
[root@localhost shell]# echo "Shell编程" | cut -nb 11
程 

bash -n 脚本

     输出:图片 25

四、printf命令

bash -x  脚本:单步执行

        例2:在第2行后面添加 "Drink tean Drink beer"

1. 命令格式

bash变量的类型:

     命令: sed '2,a Drink tea n Drink beer' test.da

printf   '输出类型输出格式'   输出内容

        本地变量(局部变量):作用域当前shell进程

             输出:图片 26

2. 输出类型

        环境变量:当前shell进程和子进程

         例3:将第2~5行的内容替换成为"No,2-5 Number"

%ns:输出字符串。n代表输出几个字符,n省略则代表全部字符

        位置变量:$1,$2,...

      命令:sed '2,5c No,2-5 Number' test.da

%ni:输出整数。n是指输出几个数字,n省略代表所有数字

                          在脚本中如何引用作用对象

              输出:图片 27

%m.nf:输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f则代表共输出8位数,其中2位是小树,6位是整数。

                          eg    ./filetest.sh   /etc/fstab  /etc/inittab ....

    例4:打印2~5行的内容

3. 输出格式

                              $1:/etc/fstab  脚本中的第一个参数

    命令:nl index.html | sed -n '2,5p' 

a:输出警告声音

                              $2:/etc/inittab  脚本中的第二个参数

            输出:图片 28

b:输出退格键(Backspace)

                              …:脚本中的第n个参数

    例5:打印除2~5行外的其他行

f:清除屏幕

shift:位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。

    命令:nl index.html |sed -n '2,5!p

n:换行

                                特殊变量:

    输出:图片 29

r:回车(Enter)

                      $?:是返回脚本或者命令执行之后的退出状态,默认返回值是0或者1,0代表退出成功,无错误,1代表退出失败,某处有错误。也可以自己设置退出值,在脚本命令最后加上exit n,n表示任何一                              个整数,比如exit 100,那么退出状态$?=100。

    解释:打印除了第2~5行外的内容,亦即打印第1行和第6行~最后一行,所以可以用命令:nl index.html | sed -n '1p;6,$p'

t:水平输出退格键

                      $#:参数的个数

     例6:从某一行开始,按照指定的间隔打印文件中的行,比如从第2行开始每隔3行显示文件的内容

v:垂直输出退格键 

                      $*:参数列表

    命令:nl index.html | sed -n  '2~3p'

4. 示例

                      $@:参数列表

    输出:图片 30

[root@localhost ~]# printf '%i %s %i %s %in' 1 "+" 2 "=" 3
1 + 2 = 3
[root@localhost ~]# printf '%i-%i-%i %i:%i:%in' 2015 12 3 21 56 30
2015-12-3 21:56:30 

exit:退出脚本

    解释:单引号中的第一个数字表示起始行数,第二个数字表示间隔数

五、awk命令

exit #

         例7:使用sed的s命令可以对文件中的字符串进行替换

1. 命令格式

如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出状态码即为脚本的退出状态码

       假设现在要对如下的htm文件中的email地址从jerry@zulmma.com改成emma@zulmma.com以及对年份数字2012进行替换为2013

awk '条件1{动作1}条件2{动作2}...' 文件名

判断文件是否存在

      <html>

条件:一般使用关系表达式作为条件,如x > 10

#!/bin/bash

         <title>My homepage</title>
           <body>
           <a href="mailto:jerry@zulmma.com">Email me!</a>
         <br>
        <p>Page created by:<a href="mailto:jerry@zulmma.com">jerry@zulmma.com</a></p>
        <p>copyright @ 2012 mysite!</p>
           </body>
           </html>

动作:格式化输出、流程控制语句

FILE=/etc/inittab

*      * 命令:sed -e 's/jerry@zulmma.com/emma@zulmma.com/g' -e 's/b2012b/2013/g' index.html

2. 示例1:提取制表符分割的文件的某一行

if [ -e $FILE ]; then

     输出:图片 31

[root@localhost shell]# cat student.txt 
ID   Name  Gender Mark
1    ming  F    85
2    zhang  F    70
3    wang  M    75
4    li   M    90
[root@localhost shell]# awk '{print $1 "t" $4}' student.txt 
ID   Mark
1    85
2    70
3    75
4    90 

                echo “ok”

     解释:sed命令中的-e选项表示指定多个编辑命令,也可以使用";"来连接多个编辑命令。例如,上面的命令也可以表示为:sed  's/jerry@zulmma.com/emma@zulmma.com/g;s/b2012b/2013/g' index.html

3. 示例2:获取磁盘利用率

else

                 g:表示全局替换

[root@localhost shell]# df -h
Filesystem      Size Used Avail Use% Mounted on
/dev/sda2       18G 2.4G  14G 15% /
/dev/sda1       289M  16M 258M  6% /boot
tmpfs         411M   0 411M  0% /dev/shm
[root@localhost shell]# df -h | grep "sda1" | awk '{print $5}'
6% 

                echo “nosuch file”

                i:表示忽略大小写

六、sed命令

fi

               b字符串b表示正则匹配单词

sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。

测试脚本是否有语法错误:bash–n +脚本名

         例8:使用sed命令实现对指定范围行内的进行行末或行首添加字符

1. 命令格式

写一个脚本

      假设要对某个文件的部分行首或行末添加一定字符或字符串

sed [选项] '[动作]' 文件名

给定一个文件,如果是普通文件就显示,如果是一个目录亦显示之,否则此为无法识别之文件

      命令:sed '1,4s/^./#&/' index.html |nl

2. 选项

#!/bin/bash

        图片 32

-n:一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。

FILE=/etc/rc.d/rc.sysinit

         解释:&符号正则表达是所匹配的内容

-e:允许对输入数据应用多条sed命令编辑。

if [ ! –e $FILE ]; then

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-09/135046.htm

-i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出。

                echo “nosuch file”

图片 33

3. 动作

fi

a:追加,在当前行后添加一行或多行

if [ -f $FILE ]; then

c:行替换,用c后面的字符串替换原数据行

                echo “commonfile”

i:插入,在当前行前插入一行或多行。

elif [-d $FILE ]; then

d:删除,删除指定的行

                echo “directory”

p:打印,输出指定的行

else

s:字符串替换,用一个字符串替换另一个字符串。格式为“行范围/s/旧字符串/新字符串/g”(和vim中的替换格式类似)

                echo”unknow”

4. 示例

fi

[root@localhost shell]# cat student.txt 
ID   Name  Gender Mark
1    ming  F    85
2    zhang  F    70
3    wang  M    75
4    li   M    90#测试-n参数
[root@localhost shell]# sed -n '2p' student.txt 
1    ming  F    85#测试单行删除
[root@localhost shell]# sed '2d' student.txt 
ID   Name  Gender Mark
2    zhang  F    70
3    wang  M    75
4    li   M    90#测试多行删除
[root@localhost shell]# sed '2,4d' student.txt 
ID   Name  Gender Mark
4    li   M    90#测试追加
[root@localhost shell]# sed '2a test append' student.txt
ID   Name  Gender Mark
1    ming  F    85
test append
2    zhang  F    70
3    wang  M    75
4    li   M    90#测试插入
[root@localhost shell]# sed '2i test insert' student.txt
ID   Name  Gender Mark
test insert
1    ming  F    85
2    zhang  F    70
3    wang  M    75
4    li   M    90#测试行替换
[root@localhost shell]# sed '2c test replace' student.txt
ID   Name  Gender Mark
test replace
2    zhang  F    70
3    wang  M    75
4    li   M    90#测试内容替换
[root@localhost shell]# sed '2s/ming/replace/g' student.txt
ID   Name  Gender Mark
1    replace F    85
2    zhang  F    70
3    wang  M    75
4    li   M    90

写一个脚本,能接受一个参数(文件路径),判定此参数如果是一个存在的文件,就显示ok,否则显示nosuch file

下面看看简单的正则表达式的匹配范例,通过这些范例,相信可以比较熟练的掌握基本的正则表达式的使用:

#!/bin/bash

HelloWorld   匹配任意一行任何位置上的10个字母:HelloWorld
^HelloWorld  匹配出现在行首的10个字母:HelloWorld
HelloWorld$  匹配出现在行尾的10个字母:HelloWorld
^HelloWorld$  匹配只包括这10个字母:HelloWorld的一行
[Hh]elloWorld  匹配HelloWorld或者helloworld
Hello.World   匹配含有Hello这5个字母,再加上任何一个字符,再加上world
Hello*World  匹配含有Hello这5个字母,再加上任意个字母,再加上world

echo $#(特殊变量,参数的个数)

在上面的例子中利用“.”或者“*”,可以匹配0个或者多个字符,但是如果要匹配的字符是一个范围,这时候就要用到“{}”,因为shell中的 "{"和"}"有特殊含义,所以需要使用转移字符“”,例如:
[kouyang@kouyang  kouyang] #  grep -n 'o{2}'  hello.txt
在hello.txt文件中找出出现两个连续的"o"的那一行

if [ -e $1 ]; then(位置变量)

[kouyang@kouyang kouyang]# grep  -n 'go{2, 5}g' hello.txt
在hello.txt文件中找到go后面出现2~5个"o"后面再紧接着一个"g"的单词的那一行

                echo“ok”

您可能感兴趣的文章:

  • 详解Linux--shell脚本之正则表达式
  • Linux Shell脚本的编程之正则表达式
  • linux shell 路径截取正则表达式
  • shell 正则表达式详细整理
  • Shell if中的正则表达式使用详解
  • Shell脚本中通过正则表达式匹配IP地址
  • Shell正则表达式验证IP地址
  • Shell正则表达式之grep、sed、awk实操笔记

else

                echo”nosuch file”

fi

写一个脚本,给脚本传递2个参数(整数),显示2个数的和与积

#!/bin/bash

If [ $# -lt 2 ]; then

                Echo”usage:cacl.sh ARG1 ARG2”

                Exit

Fi

Echo “the sum is : $[ $1 + $2]”

Echo “the prod is: $[ $1 * $2 ]”

06_02_sed命令

Linux三大文本处理工具:grep, sed(流编辑器), awk     

sed基本用法:

sed: Stream EDitor

 行编辑器 (全屏编辑器: vi),逐行读取

sed: 模式空间

默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕;

sed [options] 'AddressCommand' file ...

 -n: 静默模式,不再默认显示模式空间中的内容

 -i: 直接修改原文件

 -e SCRIPT -e SCRIPT:可以同时执行多个脚本

 -f /PATH/TO/SED_SCRIPT: 从文件中读取命令,把命令写入文件,不需要单引号括起来

 sed -f /path/to/scripts file

 -r: 表示使用扩展正则表达式

Address:

1、StartLine,EndLine

 比如1,100

 $:最后一行

2、/RegExp/

 /^root/

3、/pattern1/,/pattern2/

 第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行

4、LineNumber

 指定的行

5、StartLine, +N

 从startLine开始,向后的N+1行;

Command:

 d: 删除符合条件的行;

 p: 显示符合条件的行;

 a string: 在指定的行后面追加新行,内容为string

 n:可以用于换行

 i string: 在指定的行前面添加新行,内容为string

 r FILE: 将指定的文件的内容添加至符合条件的行处

 w FILE: 将地址指定的范围内的行另存至指定的文件中;

 s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串

                   匹配多个字符串,需要加修饰符:

                       g: 全局替换

                       i: 忽略字符大小写

     s///: 也可以使用其他字符做分隔符,只要一样就行,如s###, s@@@ 

 后项引用:(), 1, 2

                   &: 引用模式匹配整个串

 l..e->l..er: like-->liker

                      love-->lover

sed 's#(l..e)#1r#g'

     sed 's#l..e#&r#g'

l..e->L..e: like-->Like

                         love-->Love

        sed 's#l(..e)#L1#g'

sed练习:

1、删除/etc/grub.conf文件中行首的空白符;

sed -r 's@^[[:spapce:]]+@@g' /etc/grub.conf 

2、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;

sed 's@(id:)[0-9](:initdefault:)@152@g' /etc/inittab

3、删除/etc/inittab文件中的空白行;

sed '/^$/d' /etc/inittab

4、删除/etc/inittab文件中开头的#号;

sed 's@^#@@g' /etc/inittab

5、删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符;

sed -r 's@^#[[:space:]]+@@g' /etc/inittab

6、删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#

sed -r 's@^[[:space:]]+#@@g' /etc/inittab

7、取出一个文件路径的目录名称;

echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@1@g'     

本文由10bet手机官网发布于微服架构,转载请注明出处:Shell正则表达式学习笔记,Linux命令学习计划

上一篇:系统编程,多进程和多线程 下一篇:动态调整磁盘容量,CentOS下删除一个卷组10bet体育中文官网
猜你喜欢
热门排行
精彩图文