飞道的博客

Linux基础知识(18): Shell编程——正则表达式、字符截取命令、字符处理命令

618人阅读  评论(0)


注:转载请标明原文出处链接:https://xiongyiming.blog.csdn.net/article/details/106505009


1 正则表达式

1.1 什么是正则表达式

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



1.2 正则表达式与通配符的区别

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

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



1.3 基础正则表达式



1.3.1 符号“*”

通过命令 vim .bashrc 添加命令 alias grep=’grep --color=auto’ 来将匹配的内容用颜色标记出来(起别名)。



然后使用命令 source .bashrc 将文件生效(让别名生效)。


使用命令:grep “a*” test.txt 结果如下图所示,可以看出,所有内容全部显示,匹配到字符a的内容用颜色被标记出来。


使用命令:grep “a*” test.txt 结果如下图所示,可以看出只有a匹配到的结果显示出来。



(1) “a*” 表示匹配所有内容;
(2) “aa*” 表示匹配至少包含有一个a的行;
(3) “aaa*” 表示匹配最少包含两个连续a的字符串;
(4) “aaaa*” 表示匹配最少包含四个连续a的字符串;


执行各个命令结果对比如下图所示:



1.3.2 符号“.”

符号“.”表示匹配除了换行符外任意一个字符。

例如:
(1) “s..d” 表示匹配在s和d这两个字母之间一定有两个字符的字符串。

(2) “s.*d” 表示匹配在s和d这两个字母之间任意字符的字符串




1.3.3 符号“^”和符号“$”

符号“^”表示匹配行首,符号“$”表示行尾。

例如:

  1. “^m” 表示匹配以m开头的行;
  2. “n$” 表示匹配以n结尾的尾;
  3. “^$” 表示匹配空白行;



1.3.4 符号“[]”

符号“[]”表示匹配中括号中指定的任意一个字符,仅匹配一个字符。

例如:

  1. “s[ao]id” 表示匹配字母s和字母i中是a字符或o字符的字符串;
  2. “[0-9]” 表示匹配任意一个数字;
  3. “^[a-z]” 表示匹配用小写字母开头的行;
  4. “^[^a-z]” 表示匹配不同小写字母开头的行;
  5. “^[^a-zA-Z]”匹配不同字母开头的行;




1.3.5 符号“\”

符号“\”表示转义符

“\.$” 表示匹配使用”.”结尾的行



举例说明匹配日期和IP地址
假设日期格式为YYYY-MM-DD
匹配时间的命令为: grep -n "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}" test.txt
匹配IP地址的命令为:grep -n "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" test.txt





2 字符截取命令

2.1 cut命令

cut命令格式为: cut 选项 文件名
其中选项参数及其作用分别为:

  1. -f 列号 表示提取第几列;
  2. -d 分隔符 表示按照指定分隔符来分割列;



默认以制表位为分隔,如需要以其他字符作为分隔,需要用-d选项,如下图所示,以“:”作为分隔。





2.2 printf命令

printf命令格式为: printf ‘输出类型输出格式’ 输出内容

其中输出类型参数有:

  1. %ns 表示输出字符串,n是数字表示输出n个字符;
  2. %ni 输出整数,n是数字表示输出n个数字;
  3. %m.nf 输出浮点数,m是数字表示输出的整个数的位数,n是数字表示输出小位数。例如%8.2f表示共输出8位,其中小数是2位,整数是6位。

其中输出格式参数有:

  1. \a 表示输出警告声音;
  2. \b 表示输出退格键(Backspace键);
  3. \f 表示清除屏幕;
  4. \n 表示换行;
  5. \r 表示回车;
  6. \t 表示水平输出退格键(Tab键);
  7. \v 表示垂直输出退格键(Tab键);







注:在awk命令的输出中支持print和printf命令。
print :print会在每个输出之后自动加入一个换行符(Linux默认没有print命令)
printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行需要手工加入换行符。




2.3 awk命令

awk命令格式为: awk ‘条件1{动作1} 条件2{动作2}…’ 文件名

其中条件参数有:
一般使用关系表达式作为条件;
(1) x>10判断变量 x是否大于10
(2) x>=10判断变量 x是否大于等于10
(3) x<=10判断变量 x是否小于等于10

其中动作参数有:
(1) 格式化输出
(2) 流程控制语句






2.4 sed命令

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


sed命令格式为:sed 选项 ‘动作’ 文件名


(1) 其中选项参数及作用为:

  1. -n 表示一般sed命令会把所有数据都输出到屏幕,如果-n选项,则会把经过sed命令处理的行输出到屏幕。
  2. -e 表示允许对输入数据应用多条sed命令编辑。
  3. -i 表示用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出。

(2) 其中动作选项及其作用分别为:

  1. a 表示在当前行后添加一行或多行;
  2. c 表示行替换,用c后面的字符串替换原始数据行;
  3. i 表示在当期行前插入一行或多行;
  4. d 表示删除指定的行;
  5. p 表示输出指定的行;
  6. s 表示用一个字符串替换另外一个字符串。格式为: “行范围s/旧字符串/新字符串/g”



举例说明:

(1)执行命令:sed -n '2p' test.txt 查询文件中第二行数据




(2)执行命令:sed '2d' test.txt 删除文件中第二行的数据,原始文件数据不删除。
执行命令:sed '1,,3d' test.txt 删除文件中第1行至第3行的数据,原始文件数据不删除。


(3)执行命令:sed '1s/ab1/sb1/g' test.txt 替换字符串,但原始文件数据不变。


需要改变原始文件数据,需要加入选项 -i 即可




3 字符处理命令

3.1 sort命令

sort命令用于排序,其命令格式为:sort 选项 文件名

其中选项参数及其作用分别为:

  1. -f 表示忽略大小写;
  2. -n 表示数值型进行排序,默认使用字符串型排序;
  3. -r 表示反向排序;
  4. -t 表示指定分隔符,默认是分隔符是制表符;
  5. -k n[,m] 表示按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾部);

举例说明:
执行命令: sort /etc/passwd 结果按字母从小到大排序


执行命令: sort -r /etc/passwd 结果按字母从大到小排序。



3.2 wc命令

wc命令用于统计,其命令格式为:wc 选项 文件名
其中选项参数及其作用分别为:

  1. -l 表示只统计行数;
  2. -w 表示只统计单词数;
  3. -m 表示只统计字符数;






参考资料

[1] shell编程之正则表达式




转载:https://blog.csdn.net/zaishuiyifangxym/article/details/106505009
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场