您的位置:时时app平台注册网站 > 彩世界网址 > Linux正则表明式sed 详述

Linux正则表明式sed 详述

2019-11-08 01:40

shell脚本(风度翩翩卡塔 尔(阿拉伯语:قطر‎基本功知识,shell脚本根底知识

shell

一、简介

1.效应:与根本进行相互

2.语言类型:解释性语言,给底子解释用

3.脚本中第风华正茂行内容:

#!/bin/bash                       那是shell脚本的首先行内容,表示用bash这么些解释器去解释上面包车型地铁开始和结果

#!/bin/sh                            那也能够是shell脚本的首先行内容,表示用sh那么些解释器去解释上边包车型客车剧情

#!/usr/bin/env bash        env表示使用相对路线,自动找bash解释器所在地点。能够缓和不一样版本的体系bash不一定在/usr/bin/bash这一个门路下的标题

4.为了使脚本方便别的人阅读,通常会在领头加上笔者、创设时间、邮箱、版本、描述等内容,能够动用以下设置快速键的主题在本子中加进那些音讯

vim /etc/vimrc

map <F4> ms:call WESTOS()<cr>'s
function WESTOS()
        call append(0,"######################################")
        call append(1,"# Author     :vaon                   #")
        call append(2,"# Create Date:".strftime("%Y-%m-%d")."             #")
        call append(3,"# Email      :[email protected]         #")
        call append(4,"# Version    :1.0                    #")
        call append(5,"# Description:                       #")
        call append(6,"######################################")
        call append(7,"                          ")
        call append(8,"#!/usr/bin/env bash")
endfunction

#map表示影射-->按F4时调用(呼叫卡塔 尔(英语:State of Qatar)WESTOS函数

#0代表第生龙活虎行,1次之行...

#洒脱部分strftime是叁个种类自带的函数,表示显示当前时光   .是分隔符,表示那一个函数与其余两段内容互不影响

#上边是设定函数的不二诀窍:

    Fucton 函数名()

    内容

    Endfunction

下一场创造八个剧本使用F4键就能在本子最前方自动抬高以下内容:

二、幼功知识

1.变量的申明${a}b

设定a=1

echo $a 会出现1,

但echo $ab就不会自不过然1b,因为系统把ab当成贰个变量了。

能够echo ${a}b,会并发1b,把作为三个已定义的1

2.转义、弱引用、强引用

1)表示转义

echo ###不会现出结果,可是加上 echo ###就能够并发###

2卡塔尔“”表示弱援用,也得以输出###

3卡塔尔国‘’表示强援引,能够出口###

4卡塔尔强援用和弱援引的不同

例如 $  !    ``  这么些强引用会把他们充任普通内容打字与印刷到荧屏上

而弱援引会把她们正是系统变量,推行变量里的剧情

还例如在弱援用中`hostname`意味着实施hostname命令

而在强引用中代表输出`hostname`那一个内容

3.diff、patch

1)diff

【1】.

[[email protected] mnt]# cat file1
abcd
1234
[[email protected] mnt]# cat file2
abcd
[[email protected] mnt]# diff file1 file2
2d1
< 1234
#表示file1删除1234就和file2一样了

【2】.相比目录

diff -r 目录一 目录二

2)打补丁

建立hello文件:

vim hello

westos

建立hello.new文件:

vim hello.new

westos

456

安装自动更新工具包:

yum install patch -y

将hello.new与hello文件相比,多出的剧情做成hello.path补丁包:

diff -u hello hello.new > hello.path

用path补丁包去更新hello文件:

patch hello hello.path

查阅hello文件,已经被更新成和hello.new同样了:

cat hello

westos

456

注:假如patch前面加上-b参数表示在更新的还要备份原来的文章件为hello.orig

4.grep

先是创设几个文书:

[[email protected] mnt]# vim /mnt/passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
hello
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
test:ROOT:test
test:test:root
test:root:test
test:roottest:test

1卡塔尔查找富含root子段的行

[[email protected] mnt]# grep root /mnt/passwd
root:x:0:0:root:/root:/bin/bash
test:test:root
test:root:test
test:roottest:test

2卡塔尔国查找包涵root子段的行,不区分抑扬顿挫写

[[email protected] mnt]# grep -i root /mnt/passwd
root:x:0:0:root:/root:/bin/bash
test:ROOT:test
test:test:root
test:root:test
test:roottest:test

3)只要root开头的

[[email protected] mnt]# grep -i ^root /mnt/passwd
root:x:0:0:root:/root:/bin/bash

4)只要root结尾的

[[email protected] mnt]# grep -i root$ /mnt/passwd
test:test:root

5卡塔 尔(阿拉伯语:قطر‎以root起初和终极的行都不要。-E表示后面四个规格还要筛选,-v代表毫不筛选出的行

[[email protected] mnt]# grep -i root /mnt/passwd|grep -i -E "^root|root$" -v
test:ROOT:test
test:root:test
test:roottest:test

6卡塔尔表示假若包蕴只有root子段的行,root前后只要有字母都毫无,如roottest这行就不要

[[email protected] mnt]# grep -i "<root>" /mnt/passwd|grep -i -E "^root|root$" -v
test:ROOT:test
test:root:test
问题:

查看全体能登入系统的客商

解答:

[[email protected] mnt]# grep "<bash>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
足见唯有root能登录
7卡塔 尔(阿拉伯语:قطر‎grep -n 表示显示寻寻找的字符串所在行号

[[email protected] mnt]# grep -n hello /mnt/passwd
4:hello

8卡塔 尔(阿拉伯语:قطر‎gep -n2 表示彰显搜索出的行以至它的下边2行和底下2行,何况出示各自在文书中的行号

注:如若-n和2之内有空格则表示除了上边展现的故事情节还有只怕会在每行最早彰显出文件名

[[email protected] mnt]# grep -n2 hello /mnt/passwd
2-bin:x:1:1:bin:/bin:/sbin/nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:hello
5-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
6-games:x:12:100:games:/usr/games:/sbin/nologin

9卡塔尔grep -B2 表示突显寻找寻的行以致那行的上两行内容
[[email protected] mnt]# grep -B2 hello /mnt/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
hello
10卡塔 尔(英语:State of Qatar)grep -A2 表示下两行

[[email protected] mnt]# grep -A2 hello /mnt/passwd
hello
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
11卡塔尔国表示寻觅/mnt目录下包罗root字符的公文
[[email protected] mnt]# grep -r hello /mnt/
/mnt/passwd:hello

5.cut

用法:cut -d 分隔符 -f 第几列 文件

-c钦赐字符

-d钦赐分隔符

-f内定第几列

cut -d : -f 2 /mnt/psswd     #以:为分隔符,显示passwd文件第二列

cut -d : -f 2,7 /mnt/psswd   #,表示第二和第七列,借使是-表示2到第7列

cut -c 3 /mnt/passwd      #来得第三列的字符,不行使分隔符

cut -c 1,3 /mnt/passwd     #来得生机勃勃和三列的字符,不利用分隔符

题目:

显示eth0网卡的ip

解答:

[[email protected] mnt]# ifconfig eth0|grep "<inet>"|cut -d " " -f 10
172.25.254.1

6.awk

-v表示给变量付与内容:

[[email protected] mnt]# name=hello
[[email protected] mnt]# awk -F : -v name=$name 'BEGIN {print name} {print $1}END {print "end"}' /mnt/passwd
hello
root
bin
daemon
hello
mail
games
test
test
test
test
end
7.sed

-i      #那么些参数表示写入文件

sed ‘s/old/new/g’ passwd       #将passwd文件中的全体old字符替换为new

sed ‘s/old/new/g’ passwd       #将passwd文件中的全数old字符替换为new,并写入passwd文件

sed ‘2,5s/old/new/g’ passwd      #替换2到5行

sed ‘/adm/,/gdm/s/old/new/g’ passwd   #从adm字符平昔到gdm字符的内容旅长old替换为new

sed -e ‘s/old/new/g’ -e ‘s/old1/new1/g’ passwd   #将old替换为new同时将old1替换为new1

sed 5d passwd    #删除第5行

sed 5p passwd    #复制第5行

sed -n 5p passwd    #只体现第5行

-p    #代表一直将 sed 的动作写在八个档案内, -f filename 则足以实施filename 内的sed 动作

vim file

s/sbin/westos/g
s/nologin/linux/g

sed -f file passwd

题目:

将httpd服务端口改为8080

解答:

############################
# Author     :vaon                           #
# Create Date:2017-12-16             #
# Email      :[email protected]       #
############################

#!/bin/bash
PORT=`grep ^Listen /etc/httpd/conf/httpd.conf`
sed "s/$PORT/Listen $1/g" -i /etc/httpd/conf/httpd.conf
systemctl restart httpd

8.装置变量

1卡塔尔国有时设置(意况级卡塔尔国

在近些日子情状生效,当前意况关闭,变量失效

先看叁个事例:

[[email protected] mnt]# a=1
[[email protected] mnt]# echo $a
1
[[email protected] mnt]# vim test.sh
#!/bin/bash
echo $a
[[email protected] mnt]# sh test.sh 

[[email protected] mnt]#

#出于a=1是在此时此刻使用的shell里面赋的值,当进入脚本实践时,脚本使用的是子shell,这一个子shell中并未设定a=1,所以结果为空

[[email protected] mnt]# export a=1
[[email protected] mnt]# sh test.sh
1

#能够一时半刻设定a=1给全部shell,生龙活虎旦登出就能够错失这几个一时设定

2卡塔尔永远设置

【1】.系统级

对具有顾客生效

[[email protected] mnt]# vim /etc/profile

export a=1

[[email protected] mnt]# source /etc/profile

[[email protected] mnt]# logout
Connection to 172.25.254.1 closed.
[[email protected] Desktop]# ssh [email protected]
[email protected]'s password:
Last login: Sat Dec 16 09:12:16 2017 from 172.25.254.10
[[email protected] ~]# cd /mnt/
[[email protected] mnt]# sh test.sh
1

#如此那般全部shell都能够行使a=1那么些变量,登出系统再登录照旧留存a=1

【2】.用户级

只针对配置过的顾客生效,别的客户不可能运用

vim /root/.bash_profile

export a=1

source /root/.bash_profile

这段日子a=1只对root顾客生效

9.将脚本加到系统命令中去
[[email protected] mnt]# vim /etc/profile

export PATH=$PATH:/mnt

注:这里相似存在系统级或客商级的设置,在这里间运用的是系统级设置。假若只允许root能够安装/root/.bash_profile文件

[[email protected] mnt]# source /etc/profile

[[email protected] mnt]# chmod x test.sh 

下一场退出/mnt目录,直接把test.sh脚本当成系统命令去实践,开掘也足以:

[[email protected] mnt]# cd
[[email protected] ~]# test.sh
1
10.命令外号

1卡塔 尔(英语:State of Qatar)使用小名

[[email protected] ~]# vim /etc/bashrc
alias kan='cat'             #意味着试行'kan'的时候一定于实行'cat'命令

[[email protected] ~]# source /etc/bashrc

翻开小名列表:

[[email protected] ~]# alias

         ...

alias kan='cat'

         ...

实践kan那么些单词就也正是履行cat命令

[[email protected] ~]# kan /mnt/test.sh
######################################
# Author     :vaon                   #
# Create Date:2017-12-16             #
# Email      :[email protected]         #
######################################
                          
#!/bin/bash
echo $a
2卡塔 尔(英语:State of Qatar)删除小名
删除/etc/bashrc中的alias kan='cat'

下一场在剔除kan新闻:

unalias kan

明日查看alias列表,里面早就未有kan的音信了

11.*和@区别

vim test.sh

#!/bin/bash
echo '$1 Is' $1
echo '$2 Is' $2
echo '$3 Is' $3
echo '$* Is' $*
echo '$# Is' $#
echo '[email protected] Is' [email protected]
[[email protected] mnt]# sh test.sh 1 2 3
$1 Is 1                                                   #显示第1个字符
$2 Is 2                                                   #显示第1个字符
$3 Is 3                                                   #显示第1个字符
$* Is 1 2 3                                             #体现全部字符
$# Is 3                                                   #来得最后三个字符
[email protected] Is 1 2 3                                           #展现全部字符
*和@都表示全部剧情,但实质上三个是负有内容方到“”里面。而@是各样数据都加引号

$*   “1 2 3”

&@  “1” “2” “3”

12.shell脚本中等学园函授数的概念

READ()

{

        echo hello word

}

13.变量对待

1)test

2)[ ]

[[email protected] mnt]# a=1
[[email protected] mnt]# b=1
[[email protected] mnt]# test "$a" == "$b" && echo yes || echo no
yes
[[email protected] mnt]# [ "$a" == "$b" ] && echo yes || echo no
yes
3)[ 条件1 -a 条件2 ] 表示原则1和2都满意
4)[ 条件1 -o 条件2 ] 表示原则1和2任八个满足

5)[ 条件1 -eq 条件2 ]  等于

6)[ 条件1 -ne 条件2 ]  不等于

7)[ 条件1 -gt 条件2 ]  大于

8)[ 条件1 -ge 条件2 ]  大于等于

9)[ 条件1 -lt 条件2 ]  小于

10)[ 条件1 -le 条件2 ]  小于等于

[[email protected] mnt]# [ "$a" -eq "$b" ] && echo yes || echo no
yes

11)[ -n ]   变量内容不为空

12)[ -z ]    变量内容为空

[[email protected] mnt]# a=8
[[email protected] mnt]# [ -n "$a" ] && echo yes || echo no
yes
[[email protected] mnt]# [ -z "$a" ] && echo yes || echo no
no

13)[ -b ]  是或不是为块设备文件

14)[ -c ]  是或不是为字符设备文件

[[email protected] mnt]# [ -b /dev/sda ] && echo yes || echo no
yes
[[email protected] mnt]# [ -c /dev/vfio/vfio ] && echo yes || echo no
yes

15)[ -f ]  是或不是为健康文件

16)[ -S ]  是不是为套接字文件

17)[ -L  ]  是或不是为链接文件

18)[ -d ]  是或不是为目录

19)[ -e ] 文件是或不是留存

20)[ -r ]  是还是不是可读

21)[ -w ]  是或不是可写

22)[ -x ]  是不是可进行

18)[ filename1 -nt filename2 ]  如果 filename1 比 filename2 新,则为真

19)[ filename1 -ot filename2 ]  如果 filename1 比 filename2 旧,则为真

[[email protected] mnt]# touch file
[[email protected] mnt]# [ /mnt/check_ip -ot file ] && echo yes || echo no
yes

题目:

展现输入的文件类型

解答:

#!/bin/bash
[ -e $1 ] && (
        [ -f $1 ] && echo "$1 Is File"
        [ -d $1 ] && echo "$1 Is Directory"
        [ -b $1 ] && echo "$1 Is Block File"
        [ -L $1 ] && echo "$1 Is Link"
        [ -S $1 ] && echo "$1 Is Socket"
)
14.四则运算

15.语句

case语句:
现身的去相称全体条件,全体条件同不常间去布署,作用比if语句高

if语句是逐行去相配,第大器晚成行不相配再去相称下风流倜傥行,功能相当低

exit 退出脚本。前边加数字1|0则意味退出后$?的值为1|0

break 退出循环

 

Linux正则表达式sed 详述

sed、awk工具得以兑现公文替换并且把替换的文本输出到显示器上
sed和awk都以流式编辑器,是对准文书档案的行来操作的。sed经常用来替换操作。

演示的文书内容,以下操作依照此文件。
[[email protected] ~]# cat test.txt 
rot:x:0:0:rot:/rot:/bin/bash
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooot:x:0:0/roooooot:/bin/bash
11111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

1、打字与印刷某生龙活虎行
sed -n 'n'p filename 单引号内的n是三个数字,表示第几行;p也能够写到引号内;

示例,打印passwd第3-5行;

[[email protected] ~]# sed -n '3,5'p /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

打字与印刷全体行

[[email protected] ~]# sed -n '1,$'p /etc/passwd

打字与印刷某生龙活虎行,并且要来得行号,要求和grep一同使用;

[[email protected] ~]# grep -n '.*' test.txt | sed -n '1'p
1:rrt

2、打字与印刷带有有个别字符串的行

字符串要求用/ /括起来;grep中的特殊符号^ $ . * 相近适用于sed中。
[[email protected] ~]# sed -n '/root/'p /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

打字与印刷带有/sbin/nologin的行,/必要展开脱意;
[[email protected] ~]# sed -n '//sbin/nologin/'p passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

打字与印刷以d发轫的行;打字与印刷以in结尾的;打字与印刷r与o字母中间有2个随机字符的;打字与印刷带有2个o及三个o的行;
[[email protected] ~]# sed -n '/^d/'p test.txt 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[[email protected] ~]# sed -n '/in$/'p test.txt 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[[email protected] ~]# sed -n '/r..o/'p test.txt
rooooot:x:0:0/roooooot:/bin/bash
[[email protected] ~]# sed -n '/ooo*/'p test.txt
root:x:0:0:root:/root:/bin/bash
rooooot:x:0:0/roooooot:/bin/bash

3、-e可以兑现多个人展览馆现
[[email protected] ~]# sed -e '1'p -e '/111/'p -n test.txt 
rot:x:0:0:rot:/rot:/bin/bash
11111111111111111111111111111111

能够用-e写四个;-e也正是传送带,先相配最前边的打字与印刷,再合营后边的打字与印刷,所以首先行会打印2次;

[[email protected] ~]# sed -e '/root/p' -e '/bash/p' -n 1.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
user1:x:500:500::/home/user1:/bin/bash
user2:x:501:501::/home/user2:/bin/bash

-e后边也得以用;分号;-n不可能写到-e的背后,可以写在-e的后边或最终边;
[[email protected] ~]# sed -e '/root/p;/bash/p' -n 1.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
user1:x:500:500::/home/user1:/bin/bash
user2:x:501:501::/home/user2:/bin/bash

4、删除某行恐怕多行

‘d’ 那一个字符正是剔除的动作了,不仅可以够去除钦命的单行以致多行,何况还足以去除相称有个别字符的行,其它还足以去除从某一行一直到文书档案末行。

演示,删除第风姿浪漫行;删除1-3行;删除满含root关键词的行;删除第3行到结尾风流倜傥行全体行;
[[email protected] ~]# sed '1'd test.txt 
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooot:x:0:0/roooooot:/bin/bash
11111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[[email protected] ~]# sed '1,3'd test.txt 
rooooot:x:0:0/roooooot:/bin/bash
11111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[[email protected] ~]# sed '/root/'d test.txt
rot:x:0:0:rot:/rot:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooot:x:0:0/roooooot:/bin/bash
11111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[[email protected] ~]# sed '3,$'d test.txt 
rot:x:0:0:rot:/rot:/bin/bash
root:x:0:0:root:/root:/bin/bash

5、替换字符或沟通字符串

亲自过问,替换第意气风发行字母r为Tiggo;替换1-2行中ot为to;替换全体行中ot为to;
[[email protected] ~]# sed '1s/r/R/g' test.txt 
RRt
[[email protected]ia ~]# sed '1,2s/ot/to/g' test.txt 
rto:x:0:0:rto:/rto:/bin/bash
roto:x:0:0:roto:/roto:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooot:x:0:0/roooooot:/bin/bash
11111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[[email protected] ~]# sed 's#ot#to#g' test.txt 
rto:x:0:0:rto:/rto:/bin/bash
roto:x:0:0:roto:/roto:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooto:x:0:0/roooooto:/bin/bash
11111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

与vim编辑器里面替换同样的吩咐格式,s代表替换,g代表全局,不加g的话只替换行的第叁个;能够应用# @作为分隔符。

1s象征只替换第生机勃勃行;1,3s代表第风度翩翩行到第三行;不加行数的话默认为全体行。

演示,删除文书档案中具备的数字's/[0-9]//g'  如剔除文书档案中具备的字母's/[a-zA-Z]//g'删除全部的数字和字母's/[0-9a-zA-Z]//g'
[[email protected] ~]# sed 's/[0-9]//g' test.txt 
rot:x:::rot:/rot:/bin/bash
root:x:::root:/root:/bin/bash
daemon:x:::daemon:/sbin:/sbin/nologin
rooooot:x::/roooooot:/bin/bash
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

演示,删除文书档案中颇负的字母
[[email protected] ~]# sed 's/[a-z]//g' 1.txt 
::0:0:/://
::11:0::/://
::11:0::/://
::0:0:/://
1111111111111111111111111111111

演示,删除文书档案中不是斯洛伐克语字母的(数字和特殊符号卡塔尔国
[[email protected] ~]# sed 's/[^a-z]//g' 1.txt 
rotxrotbinbash
operatorxoperatorrootsbinnologin
operatorxoperatorroootsbinnologin
rooootxroooootbinbash
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

演示,删除文书档案中不是数字的(匈牙利语字母和特殊符号卡塔 尔(阿拉伯语:قطر‎

[[email protected] ~]# sed 's/[^0-9]//g' 1.txt 
00
110
110
00
1111111111111111111111111111111

演示,把文书档案中的小写字母全部替换为大写字母 's/[a-z]/u&/g'
[[email protected] ~]# sed 's/[a-z]/u&/g' 1.txt 
ROT:X:0:0:/ROT:/BIN/BASH
OPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGIN
OPERATOR:X:11:0:OPERATOR:/ROOOT:/SBIN/NOLOGIN
ROOOOT:X:0:0:/ROOOOOT:/BIN/BASH
1111111111111111111111111111111
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

示范,把文档中的大写字母全体轮番为小写字母 's/[A-Z]/l&/g'

[[email protected] ~]# sed 's/[A-Z]/l&/g' 1.txt 
rot:x:0:0:/rot:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

更动的还要加-n p 打字与印刷特定的行;

[[email protected] ~]# sed -n '1s/[a-z]/u&/g'p 1.txt 
ROT:X:0:0:/ROT:/BIN/BASH

6、沟通叁个字符串的岗位
sed -r 's/([^:] )(:.*:)([^:] $)/321/'
[^:]非冒号,不是冒号的有所字符
-r, --regexp-extended  在本子中选择扩充正则表明式; 加r选项的情致为前面不用再加脱意 
( )括号括起来是分段的意味,
321    是表示3调换1,前面包车型大巴剧情调换成前方

示范,aa与ff交流;加-r选项不用加脱意符号;不加-r ( )括号左右都亟需加脱意;沟通多行用最终二个;
[[email protected] ~]# cat 1.txt 
aa:bb:cc:dd:ee:ff
[[email protected] ~]# sed -r 's/(aa)(.*)(ff)/321/' 1.txt
ff:bb:cc:dd:ee:aa
[[email protected] ~]# sed 's/(aa)(.*)(ff)/321/' 1.txt 
ff:bb:cc:dd:ee:aa
[[email protected] ~]# sed -r 's/([^:] )(:.*:)([^:] $)/321/' 1.txt 
ff:bb:cc:dd:ee:aa

演示,rot与/bin/bash实行沟通
[[email protected] ~]# grep 'rot' test.txt
rot:x:0:0:rot:/rot:/bin/bash
[[email protected] ~]# grep 'rot' test.txt |sed 's/(rot)(.*)(/bin/bash)/321/'
/bin/bash:x:0:0:rot:/rot:rot
[[email protected] ~]# grep 'rot' test.txt |sed -r 's/(rot)(.*)(/bin/bash)/321/'
sed:-e 表达式 #1,字符 18:“s”的不解选项
[[email protected] ~]# grep 'rot' test.txt |sed -r 's/(rot)(.*)(/bin/bash)/321/'
/bin/bash:x:0:0:rot:/rot:rot

加-r  后(卡塔 尔(阿拉伯语:قطر‎内的/bin/bash 也还亟需脱意才方可;

-i 选项    直接沟通字符,何况保留原来的著工件里面。使用i选项前,记得备份原来的书文件。

[[email protected] ~]# sed -r -i 's/([^:] )(:.*:)([^:] $)/321/' 1.txt 
[[email protected] ~]# cat 1.txt 
ff:bb:cc:dd:ee:aa

在sed命令中引进shell变量

Linux下Shell编制程序——sed命令基本用法

Unix文本管理工科具之sed 

sed 高档用法

sed命令精解与示范

本文永远更新链接地址:

详述 sed、awk工具得以完成文件替换并且把替换的文书输出到荧屏上 sed和awk都以流式编辑器,是对准文书档案的行来操作的。...

[[email protected] /]# echo $?

      echo "restart........"

55

地方变量:

[[email protected] /]# echo $?

  #当钦定条件不树立即,重回结果为真

$0  :  前段时间实行的长河/进程名

do             ==》do

 

[[email protected] ~]# env  //查看系统的大局情形变量

[[email protected] ~]# echo $str

Result=`expr $Result $1`

      ;;

/shellscripts/a.sh           //$0打字与印刷的是脚本笨的名字

[[email protected] Packages]# echo $?

#!/bin/bash

0-9           常用的为1-9

  then

esac

 

if 条件测验命令                if 3306端口是还是不是在监听状态

c

[[email protected] ~]#

   (前面真则实施后边卡塔尔国

[[email protected] /]# echo $?

#Author : Create by meng       //脚本的祖师

[[email protected] ~]# ls –a    能够查阅到那2个文本

hello.sh  ipadd.sh  logmess_clean.sh 

`` 将指令实施的结果输出给变量

do                                        done

变量的乘法运算:

echo $2

 

     echo "laod......."

. script           //这种方法script也不供给可实行权限

[[email protected] ~]# echo $PATH  //查看系统环境变量路线

重新测量检验钦点的口径,只要条件建构则反复实行相应的授命操作

 

echo $str

#!/bin/bash

done                    done

   格式:[表达式1]   操作符  [表达式2]

then

      ;;

do

&& 规范化切合必要才会推行前面包车型地铁动作

 

  -z:字符内容为空

#!/bin/bash

 

 RATE=`df |awk'NR==4{print int($5)}'`

案例

                 if条件语句--双分段

鉴于上篇散文总计的不是很详细,有超多方面还未有涉及到shell各种方面,所以公布此文章对shell做了更周密的总计:

用以迁移地方变量,将$1~$9依次向左传递

本子的进行:

[[email protected] /]# [ -e /etc/passwd ]

小说版权:

  -ne:不等于(Not Equal)

常用的操作测量检验符

经过脚本来看些地方变量:

1000 1000

#[ $name != "root"] && echo "name is erro"

[[email protected] /]#

if

 

if

2

      echo "The sum is: $Result"

[[email protected] Packages]# [ -f /etc/passwd ]

 

 

   !:逻辑否

[[email protected] ~]#

查阅/shellscripts/hello.sh是还是不是可实行,可进行则输入yes,不然就予以它可实行权限

[[email protected] ~]# cat c.sh

[[email protected] /]# echo $?

  -eq:等于(Equal)

‘’幸免援引别的变量符,视为普通字符

 

while 命令或表达式          while 可用内部存款和储蓄器<100mb

 

echo `expr $1 $2`             //$1和$2代表了2个职位变量

变量的加减法运算:

[email protected] ~]# cat a.sh

  -ge:大于或等于(Greater or Equal卡塔 尔(阿拉伯语:قطر‎

 

[[email protected] /]# echo $?

for TM in a b c d e

[[email protected] shellscripts]# hello.sh

 格式:[ 整数1 操作符整数2 ]

1000

 

 

NUM=`df | awk 'NR==5{print int($5)}'`

 

 

 echo "Warning,DISK is full!"

while [ $# -gt 0 ]

zhangsan

[[email protected] shellscripts]# a.sh 1 2

case $1 in

root

expr: syntax error

#V1.1                  //脚本的本子

 

 

$?  : 上一条命令实施后重回的景色,当状态为0时期表符合规律,非0表示实行万分或出错。

#a.sh

*)

[[email protected] shellscripts]# a.sh 2 3

[[email protected] ~]# cat a.sh

 用处:测验表明式是还是不是成立,创造重返值为0,否重返值为别的值。

[[email protected] ~]# ./a.sh

restart)

[[email protected] ~]# ./a.sh

status)

      ;;

[[email protected] /]# [ -r /etc/shadow ]

}

-f:测验是或不是为文件【file】

分别局地变量和全局变量

 else

 

 

测量试验文件的气象

要想全盘的消亡某些全局变量:

----------. 1 root root 1086 2月  26 22:38 /etc/shadow

[[email protected] ~]# expr $a $a                //$a $a 要有空格不然也是不对的

预订义变量

#Date : 2014-5-28

[[email protected] ~]# echo ${a}aaaaaa   //把变量用{}括起来,系统才会去输出变量

55

[[email protected] ~]# cat /etc/passwd | grep bash | awk -F: '{print ($1)}'

[[email protected] ~]#

注解:以上文化全来自与自学shell编制程序总括回看

adder 22 33

 ≡ 多如牛毛的测验项目

字符串相比

小说版权:

#Mail :~~                                   //邮件地址

  -le:小于或等于(Lessser or Equal卡塔尔国

laod)

[[email protected] ~]# echo "$PWD is lujing"

 格式 [ 字符串1 = 字符串2 ]

   #操作符两边最少一个为真时,结果为真,不然结果为假

 

逻辑测验

 

 

本子的正规化书写:

“ ” 同意通过$符援用其余变量

  #左右五个表明式都制造是整套测验结果才为真,不然为假

整数值比较

[[email protected] ~]# expr $a * $a

-e:测测量检验目录或文件是还是不是留存【exist】

Yes        

stop......

 

[[email protected] ~]# bianliang.sh  //大家定义的变量,不过通过脚本却不能够出口

echo "hello,world!"            //后边的才是本子的剧情

input:2

[[email protected] ~]# expr 2 % 1                //取余

[[email protected] ~]# export $PATH  //也能够使用export查看环境变量路线

 

  if

 

      ;;

#a.sh

 

fi                   

扩展:” “反斜杠,功效屏蔽字符的异样意义

1

采纳案例:

 

 

      ;;

[[email protected] /]# ll /etc/shadow

-d :测量试验是还是不是为目录【directory】

test命令

1000000

hello world!   

 then 指令连串1         ==》      then mysqld 劳动已运行

  =:字符串内容千篇一律

-r:测量试验当前的客商是或不是有读取的权杖【read】

echo $1

   格式:[操作符   文件或目录]

      整数值相比较

  -lt:小于(Lesser Than)

[[email protected] ~]# echo $a

 格式:test  条件表明式  [规格表明式]

#[ $name != "root"] && echo "name is erro"

[[email protected] ~]# echo $aaaaaaaa  //系统把$aaaaa视为多少个变量

# unset str  清除全局变量

      done

  倘使登陆客户数小于或等于10则输出YES

      echo "it is shuzi"

[[email protected] shellscripts]# cat a.sh

5

 if [$RATE -gt 80]

[[email protected] shellscripts]#

[[email protected] ~]# ./a.sh 10 20

  #!/bin/bash

 

-L:测验是不是为标识链接文件【link】

小说版权:

1000aaaaaa

小说版权:

input:a

~                                                                                                                                                                 

    (后面假则实践前边卡塔尔

service vsftp status &>/dev/null

                 then 指令系列   ==》      then 报警

#c.sh

adder(){

[a-z]|[A-Z])

      字符的串比较

 

[[email protected] shellscripts]# ls

esac

小说版权: ...

#echo $name

1

#a.sh

#read -p "input your name: "  name

-w:测量试验当前的客商是还是不是有写的权位【write】

     一声令下列表      拿到可用内部存款和储蓄器数

 

看清vsftp是不是在运维。若已运营则输出提醒音信,不然重新起动vsftp服务

 

多种分支语句

1

input:@

[[email protected] ~]# a=1000

 !=:字符串内容分歧等,!号表示相反的意思

 

input:#

 

  echo "warning,DISK is full!"

   -a 或&&:逻辑与,“而且”的意思

 

0

 

                       

[[email protected] ~]# ./a.sh

#a.sh

           fi             

 

[[email protected] /]# [ -x /etc/shadow ]

      echo "it is english"

[[email protected] ~]# source .bash_profile  

      echo "start....."

 

$$  : 一时一刻所在经过的历程号

变量的加法运算:

0

 else 一声令下种类2                    else 启动mysqld服务

#!/bin/bash

      测量检验文件的图景

当“条件创建“时实行相应的操作

2000

      [ 字符串1 != 字符串2 ]

0

常用的测验操作符

# vim bianliang.sh

      [ -z 字符串 ]

[[email protected] shellscripts]# [ -x /shellscripts/hello.sh ] && echo yes || chmod x /shellscripts/hello.sh

[[email protected] ~]# str=1000   //局地变量

.........

#!/bin/bash

 

root

1000 1000

lenovo

  常用的测量检验操作符

1000

stop)

[[email protected] 桌面]# who|wc -l

[[email protected] ~]# cat a.sh

read -p "input:" NUM

then

 

[[email protected] ~]# expr 2 / 1      //除法

echo `expr $1 $2`

-x:测量检验当前的客商是或不是可实行和该文件【excute】

start)

      echo "stop......"

  后生可畏旦/boot分区的半空中利用超越五分四,输出报告急察方消息

#echo $name

“”和‘’与 ` ` 在shell变量中的不相同       

[[email protected] ~]# [ -f /etc/grub.conf ] && echo yes  || echo no 

it is shuzi

假若/boot分区的空中利用超越百分之九十,输出警告音讯。大家来写个剧本

当“条件创立”、“条件不创立”时进行差异的操作

 

case "$NUM" in

[[email protected] ~]# echo $a

echo $0

 

 

 

b

[[email protected] ~]# ./a.sh start

遭遇变量路线:

1000

  -gt:大于(Greater Than)

      逻辑测量检验

      do

/root is lujing

#vi a.sh

#!/bin/bash

sh script    //这种措施script没有必要可实行权限

      echo "........."

[[email protected] ~]# export PATH=$PATH:/date/  //有的时候增添/date目录到蒙受变量路线下

援用案例:

#env   能够查阅到具有全局变量

[[email protected] ~]# expr 2 – 1        //减法

[[email protected] ~]# expr $a * $a              //* 在操作系统中实属特殊字符,屏蔽字符的特别含义

      shift迁移语句

[[email protected] 桌面]# [ `who|wc -l` -le 10 ] && echo "YES"

#Func (do):this is useradd user script.            //脚本的效果

#!/bin/bash

2

$!  :  后台运行的尾声一个进程号

break语句

 

46

 

[[email protected] /]# [ -d /var/spool/ ]

[[email protected] ~]# ./c.sh

 if [ $? -eq 0 ]

1000

YES

Result=0

##read -p "input your name: "  name

&& || 的用法:(参数的比对卡塔 尔(阿拉伯语:قطر‎

要想重启主机后还生效就要编写制定景况计划文件root/.bashec或/root/.bash_profile与/etc/profile文件,想要登时见到效果可以行职务令:

 fi

     if条件语句   --单分支

 

#echo `ls`  反引号中的命令时方可独立实行的,然后再由echo输出

[[email protected] shellscripts]# cat a.sh

作品版权:

it is english

[[email protected] /]# echo $?

awk的附加扩张

[[email protected] ~]# ^C

函数的应用

  /etc/init.d/vsftp restart

  布衣蔬食的测量检验操作符

46

[[email protected] ~]# echo '$PWD is lujing'

[[email protected] ~]# bianliang.sh   //再一次利用完全ok

[[email protected] ~]# set   //查见到的是局地变量和全局变量2种

         if  法则测验命令               if 磁盘已用空间>十分之七

#!/bin/bash

----------. 1 root root 1086 2月  26 22:38 /etc/shadow

for 变量名  in 取值列表                       发邮件    

 

      echo "start...."

#!/bin/bash

The sum is: 30

[[email protected] /]# ll /etc/shadow

   -o或||:逻辑或,只怕的野趣

#!/bin/bash

//查看/ect目录下是或不是有/grub.conf文件,有则输出yes,无则输出no。

注:.bash_profile文件支队系统当下客商生效

      ;;

[[email protected] ~]# expr $a $a

用来跳出当前的循环体,试行循环体后的口舌。

start....

           ;;

[[email protected] /]# [ -L /etc/shadow ]

0

[[email protected] ~]#

0

 

echo $TM

[[email protected] ~]# ./c.sh

[[email protected] ~]#

 

adder 12 34

./ script          //必得具有可实行权限

sleep 1

      shift

[[email protected] /]# [ -w /etc/shadow ]

[[email protected] ~]# echo $a $a              //这是第22中学漏洞超级多的操作,运算必得使用expr

[[email protected] ~]# ./a.sh @

echo $3

[[email protected] shellscripts]# a.sh a b c d e

[[email protected] Packages]#

a

 

0

去编辑二个剧本:

#!/bin/bash

 echo "vsftp service is running"

for循环语句                            for  收件人  in 邮件地址列表

[[email protected] ~]# export str   //增加到全局变量中

[0-9])

      ;;

 

 

 

依据变量的不通值,重复施行豆蔻梢头组命令操作   ==》                do

[ $NUM -gt 80 ]

$#  : 命令行中地点参数的个数

$PWD is lujing

      echo "stop......"

done

done

3

.........

[[email protected] ~]# ./a.sh stop

一声令下类别

||    原则不切合须求时才会实施前边的动作

$*  : 不无职位参数的剧情

[[email protected] /]#

本文由时时app平台注册网站发布于彩世界网址,转载请注明出处:Linux正则表明式sed 详述

关键词: