首页 > shell编程-正则表达式

shell编程-正则表达式

1.正则表达式是什么

它主要用于字符串的模式分割,匹配,查找及替换操作。

2、正则表达式与通配符

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

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

3.基础正则表达式

 .相当于通配符的?

[0-9]{4}-[0-9]{2}-[0-9]{2}

[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}

3.字符截取命令

cut [选项] 文件名

-f 列号:提取第几列

-d:分隔符:按照指定分隔符分割列,默认分隔符是tab键(制表符)

ID name gender Make

1   nyan     n       89

2   luke      l        87

3   mak      n       67

cut -f 1,3 student.txt

grep "/bin/bash" /etc/passwd | grep -v "root" | cut -f 1 -d ":"

 

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

输出类型:

%ns:输出字符串。n是数字指代输出几个字符

%ni:输出整数。n是数字指代输出几个数

%m.nf:输出浮点数.m和n指代输出整数位和小数位位数

printf不支持管道符,所以printf $(cat 2.txt)

 

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

条件Pattern:

一般使用关系表达式作为条件:>,<>=,<=

动作Action:

格式化输出

流程控制语句

awk '{printf $2 " " $4 " "}' student.txt

BEGIN: awk 'BEGIN{print "test"}{print $2 " " $4}' student.txt

FS内置变量: cat /etc/passwd |grep /bin/bash |awk '{FS=":"}{print $1 " " $3}'

如果没有加BEGIN,则是先读取数据赋值给指定变量$n,再告诉FS是":"作为分隔符,此时已晚。

cat /etc/passwd |grep /bin/bash |awk 'BEGIN{FS=":"}{print $1 " " $3}'

 

sed字符替换命令

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

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

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

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

动作:

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

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

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

d:删除指定行

p:打印,输出指定的行

s:字符串替换,用一个字符串替换另外一一个字符串。格式为 "行范围s/旧字符串/新字符串/g"

sed -n '2p' student.txt

sed '2a 3 f v m' student.txt

sed '2,4d' student.txt

前面数字是行号

 

4.字符处理命令

sort [选项] 文件名

-f:忽略大小写

-n:以数值型进行排序,默认使用字符串型排序

-r:反向排序

-t:指定分隔符,默认是分隔符是制表符

-k n[,m]:按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)

sort -n -t ":" -k "3,3" /etc/passwd

wc:统计命令

wc [选项] 文件名

-l:只统计行数

-w:只统计单词数

-m:只统计字符数

 

转载于:https://www.cnblogs.com/Nyan-Workflow-FC/p/5667629.html

更多相关:

  • 全卷积网络(FCN) 1.全卷积神经网络介绍 FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的fea...

  • printf()函数优点在于可以格式化输出 格式:   %['padding_character][-][width][.precision]type   所有的转换说明都是以%开始,如果想打印一个%符号,必须用%% ;   参数“'padding_character”是可选,它将被用来填充变量直至所指定的宽度,该参...

  • 给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。 输入格式: 输入在一行中给出一个长度不超过10000的、仅...

  • 给定两个整数A和B,输出从A到B的所有整数以及这些数的和。 输入格式: 输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。 输出格式: 首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。 输入样例:...

  • python面试题目 原文地址:https://www.usblog.cc/blog/post/justzhl/b5cc9a05c7d2 问题一:以下的代码的输出将是什么? 说出你的答案并解释。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Parent(object):     x...

  • 文章目录前言语法格式sed 操作地址sed子命令sed正则表达式sed使用实例打印命令 p删除命令 d替换命令 s指定操作地址的范围 逗号 ,多重编辑命令 e下行插入命令 a上行插入命令 i修改命令 c获取下一行命令 n转换命令 y退出命令 q总结 前言 sed是一个“非交互”式的字符流编辑器,能够很好得完成对多个文件的一系...

  • 最近需要在脚本中修改几个配置文件参数且不能影响其他参数,于是想到了sed的强大之处,拿来学学 -i参数表示直接替换并修改文件 -i参数时直接修改文件 sed -i 's/aaa/bbb/g' testfile 将testfile文件中的aaa替换为bbb字符串 删除文件指定行或者某行内容 sed -i '/aaa/d' test...

  • SED单行脚本快速参考(Unix流编辑器) « web2.0ã€äº‘计算ã€é›†ç¾¤ã€é«˜å¯ç”¨æ€§SED单行脚本快速参考(Unix流编辑器)2005年12月29日英文标题:USEFUL ONE-LINE SCRIPT FOR SED (Unix stream editor)原标题:HANDY ONE-LINE...

  • 在DOS窗口执行了一些列命令完成某项工作后,如果要查看都执行了那些命令,该如何办呢?(前提:DOS窗口未关闭的情况下)     一、方法一:使用↑↓箭头上下翻看执行过的命令,此方式适宜执行命令较少的情况; 二、方法二:使用快捷键; F7快捷键查看所有执行过的命令 F3:调出上一条执行过的命令,调出后直接回车即可执行; F...

  • 在windows的DOS操作界面里面,清屏的命令是cls,那么在linux 里面的清屏命令是什么呢?下面笔者分享几种在linux下用过的清屏方法。 1、clear命令、这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息。 2、Ctrl+l(小写的L)、这是一个清屏的快捷键,这个是笔者...

  • LINUX下用CTRL+R快速搜索HISTORY历史命令,快速索引到之前使用过的命令行语句 前提是,搜索已经使用的命令,否则是查不出来结果的。 ctrl+r 用途:反向搜索执行过的命令。(reverse-i-search) 1、任何目录下按住ctrl + r 2、输入历史命令中的字符串 ,比如 输入shut 会检索...

  • 刚开始接触linux,总有些简单的问题不知道怎么搞定,先将目前汇总的解决方法叫做"linux入门-1",后续在使用过程中逐步总结。   1. 连接 ADSL : sudo pon dsl-provider 断开 ADSL: sudo poff 查看 ADSL 状态: plog 2. dpkg 命令 dpkg 是 Debia...

  • 文章目录NVME 和 AHCI 性能比较NVME-CLI nvme工具使用1. 安装2. 命令综述3. 基本命令演示4. NVME 固件设备升级...