192.6.4shell正则表达式

1,正则表达式的特殊符号:

[:alnum:]代表英文大小写字母及数字 
[:alpha:]代表英文大小写字母
[:blank:]代表空格和 tab 键
[:cntrl:]键盘上的控制按键,如 CR,LF,TAB,DEL
[:digit:]代表数字
[:graph:]代表空白字符以外的其他
[:lower:]小写字母
[:print:]可以被打印出来的任何字符
[:punct:]代表标点符号
[:upper:]代表大写字符
[:space:]任何会产生空白的字符如空格,tab,CR 等
[:xdigit:]代表 16 进位的数字类型

2参数说明

-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!

3.字符组匹配:

[]中包含的任意一个字符 只能是一个  [^...]排除型字符组 

[abc]           :表示“a”或“b”或“c”
[0-9]           :表示 0~9 中任意一个数字,等价于[0123456789]
[\u4e00-\u9fa5] :表示任意一个汉字
[^a1<]          :表示除“a”、“1”、“<”外的其它任意一个字符
[^a-z]          :表示除小写字母外的任意一个字符


eg:

查找“tast”或者“test”两个字符串。
# grep -n 't[ae]st' regular_express.txt 

查找不包含“#”的字符串
# grep -n '[^#]' regular_express.txt 

查找字符“oog”,如果我不想要“oog”字符前面有 g,则查找“[^g]oog”,同理,查找“[^go]oog”是指字符“oog”前面不能为 g 或者 o。

4.行首符^   行尾符 $

例如 ①查找一个文件中行首为"the"的字符行 

②查找行首为大写字母的行

③查找d结尾的行

④查找空行 grep -n '^$' wqq.txt

⑤查看文件 过滤空白行 注释行

⑥*  代表重复前面0个或者多个字符

e* 表示具有空字符或者一个以上e字符

ee* 表示前面的第一个e字符必须存在 ,第二个e则可以是0个或者多个e字符

ee*e 表示第一个和第三个e必须存在 第二个e则可以是0个或者多个e字符

5,限定连续字符范围{}  {}大括号在shell中有特殊定义 需要转义

例子  查询连续两个o的字符行: gerp -n 'o\{2\}' wqq.txt

查找g后面2到5个o,再接g的字符串: grep -n 'go\{2,5\}g' wqq.txt

^word    表示带搜寻的字符串(word)在行首
word$    表示带搜寻的字符串(word)在行尾
.(小数点) 表示 1 个任意字符
\        表示转义字符,在特殊字符前加\会将特殊字符意义去除
*        表示重复 0 到无穷多个前一个 RE(正则表达式)字符
[list]   表示搜索含有 l,i,s,t 任意字符的字符串
[n1-n2]  表示搜索指定的字符串范围,例如[0-9] [a-z] [A-Z]等
[^list]  表示反向字符串的范围,例如[^0-9]表示非数字字符,[^A-Z]表示非大写字符范围
\{n,m\}  表示找出 n 到 m 个前一个 RE 字符
\{n,\}   表示 n 个以上的前一个 RE 字符

6,

sed 是非交互式的编辑器。它不会修改文件,除非使用 shell 重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed 编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先 sed 把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed 每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed 便结束运行。sed 把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。

如果要修改原文件,可使用-i 选项。

例子:将wqq.txt文件列出并打印行号 同时将6-8行删除

!!! sed 是sed -e的简写  后接单引号

①删除第二行到最后一行  nl wqq.txt | sed '2,$d'

在原文件中删除第一行  sed -i '1d' wqq.txt

②a表示在行后加字符串   i表示在行前添加字符串

③ c为替换内容选项   将4-5行内容替换成 REPKAFKFFJ

④列出文件内第5-7行

⑤替换字符串

sed 's/被替换字符串/新字符串/g'

7.shell 脚本中$.代表

$0 这个程式的执行名字
$n 这个程式的第n个参数值,n=1..9
$* 这个程式的所有参数,此选项参数可超过9个。
$# 这个程式的参数个数
$$ 这个程式的PID(脚本运行的当前进程ID号)
$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$- 显示shell使用的当前选项,与set命令功能相同
$@ 跟$*类似,但是可以当作数组用

设置参数

#!/bin/sh

if [ $# -eq 3 ]; then      //参数个数是3

	sed -i 's#<'"$1"'\>.*<#<'"$1"'\>'"$2"'<#g' $3
	
else
   echo replace error.
fi


root@CELL:~# cat /etc/config/ntpclient 
config ntpserver
	option hostname '1.cn.pool.ntp.org'
	option port     '123'

config ntpserver
	option hostname '2.cn.pool.ntp.org'
	option port     '123'

config ntpserver
	option hostname '3.cn.pool.ntp.org'
	option port     '123'

config ntpserver
	option hostname '0.cn.pool.ntp.org'
	option port     '123'

config ntpdrift
	option freq     '0'

config ntpclient
	option interval	21600
	#option count	10
	#option interface wan


cat /etc/config/ntpclient | grep hostname  | awk -F[\'] '{print $2}' | sed -n "1p"
//先抽取hostname的所有行,awk遇到' 就分隔 ,按照'分隔的从最小位1开始,打印第二个就是1.cn.pool.ntp.org , 该文件中得到的是四行单引号中的值,然后抽取取到的第一行就是第一个hostname的值

cat /etc/config/ntpclient | grep interval  | awk '{print $3}'   //21600

root@CELL:~# cat /etc/config/ntpclient  | awk  '{print $3}' | sed -n 2p 
'1.cn.pool.ntp.org'
root@CELL:~# cat /etc/config/ntpclient  | awk  '{print $3}' | sed -n 1p 

root@CELL:~# cat /etc/config/ntpclient  | awk  '{print $3}' | sed -n 6p
'2.cn.pool.ntp.org'
root@CELL:~# cat /etc/config/ntpclient  | awk  '{print $3}' | sed -n 21p
21600
root@CELL:~#

root@CELL:~# cat /etc/config/ntpclient  | awk  '{print $3}' | sed -n 6p | sed -r "s/.*'(.+)'.*/\1/"
2.cn.pool.ntp.org

root@CELL:~# cat /etc/config/ntpclient  | awk '{print $3}'  | sed -n 21p | sed -r "s/.*'(.+)'.*/\1/"
21600
root@CELL:~# 
awk 'NR==2{$4="06"}{print}' myfile >newfile

设置值 setNTPParameter.sh  红色的$1 $2 $3是传递的变量  灰色$3表示第三列
#!/bin/sh

if [ $# -eq 3 ]; then

	awk 'NR=="'$1'"{$3="'$2'"}{print}' $3 > copy_ntpclient
	
	mv copy_ntpclient $3
else
	echo replace error
fi


/
如果写入当前文件   在xshell执行没有问题,放到站上就循环往文件结尾追加空值
#!/bin/sh

if [ $# -eq 3 ]; then

	awk 'NR=="'$1'"{$3="'$2'"}{print > "'$3'"}' $3 

else
	echo replace error
fi

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值