正则表达式-linux基础
通配符
通赔符是模糊匹配的基础,因为通赔符机制的存在使得我们在查找文件的时候非常方便
* :匹配任意长度的任意字符,也可以一个都没有
. :匹配任意单个字符,必须有一个
[ ] : 匹配指定范围内的单个字符
[^] : 匹配指定范围外的任意单个字符
[^[0-9]] 或 [^0-9] :表示匹配数字外的任意字符
[^[:upper:]] :表示匹配大写字母外的任意字符
pa[0-9]: pa 后面匹配一个数字
[a-z], [A-Z] [0-9] [a-z0-9] [abdxy]
pa[0-9][0-9]: pa 后面匹配两个数字
[[:upper:]] :表示所有大写字母
[[:lower:]] :表示所有小写字母
[[:alpha:]] :表示所有字母
[[:digit:]] :表示所有数字
[[:alnum:]] :表示所有的字母和数字
[[:space:]] :表示所有的空白字符
[[:punct:]] :表示所有的标点符号
重定向 覆盖与追加
# echo abc > 123.txt --如果123.txt不存在,则创建123.txt,并内容修改为abc;如果123.txt文件存在,则只把原内容修改为abc
# echo cba >> 123.txt --两个>符号,就是原内容不变,再追加新的内容
# cat > 123.txt << EOF --如果123.txt不存在,则创建它,并加入两行内容111 222;存在则覆盖它原来的内容
111
222
EOF
# cat >> 123.txt << HAHA --相比于上一条,这是追加内容,而且标记不一定要用EOF,只要前后一致成对出现就可以
> 333
> 444
> HAHA
grep文本处理工具
grep:文本搜索工具,查找匹配内容并打印出来
grep[选项]匹配模式file对象
-color=auto:对匹配到的文本着色,高量显示
-i :忽略大小写
-E :等同于egrep 支持使用扩展的正则表达式(不需要使用\转义)
-A :显示匹配到的行和其后面的行
grep -A 1 root /etc/passwd
-B :显示匹配到的行和其前面的行
grep - B 1 root /etc/passwd
-A :显示匹配到的行和其前后的行
grep -C 1 root /etc/passwd
字符匹配
. : 匹配任意单个字符
[ ] :匹配指定范围内的任意单个字符
[ ^ ] :匹配指定范围外的任意单个字符
[[ :digit:]] 匹配任何数字
[[ :lower:]] 匹配任何小写字母
[[ :upper:]] 匹配任何大写字母
[[:alnum: ]] 匹配任何字母
[[ :alpha:]] 匹配任何字母和数字
[[ :punct:]] 匹配任何标点符号
[[ :space:]] 匹配空格符
[[:xdigit:]] 匹配任何16进制数字
匹配次数
.* :贪婪模式 :匹配任意长度的任意字符
\? :匹配其前面的字符0此或1次,也就是前面的字符可有可无
\+ :匹配其前面的字符一次或多次,即其前面的字符要出现至少一次
\{m\}:精确匹配到其前面字符的m次
\{m,n\}:匹配其前面的字符至少m次,至多n次
\{0,n\}:至多n次
\{m,\}:至少m次
位置锚定
^:行首锚定,用于模式的最左边
$:行尾锚定,用于模式的最右边
^pattern$:用于pattern来匹配整行
^$:空白行
^[[:space:]]$:空行或空白字符的行
单词:非特殊字符组成的连续字符都称为单词
\< 或 \b:词首锚定,用于单词模式的左侧
\> 或 \b:词尾锚定,用于单词模式的右侧
\<pattern\>:匹配完整单词
sort 排序命令
sort [选项]文件名
sort /etc/passwd :将用户从a到z进行排序
-t :指定字段分隔符,便于指定排序的字段
-k :用于排序比较的字段
sort -t: -k3 -n /etc/passwd
基于用户的uid的大小进行排序( -t:参数紧挨着 )
-n :基于数值大小排序
cut -d: -f3 /etc/passwd |sort 按字符进行排序
cut -d: -f3 /etc/passwd |sort -n 按数值大小进行排序
-r :逆序排序
sort -t: -k3 -n -r /etc/passwd
-f :忽略字符大小写
A的ASCII码为:65 a的ASCII码为97
-u :重复的行只保留一份
sort -t: -k7 -u /etc/passwd
@@@找出/etc/passwd的所有的shell一共有多少种
sort -t: -k7 -u /etc/passwd | wc -l
diff和patch命令
diff :逐行比较文件的不同,并显示出来
patch :打补丁工具,将补丁打到老文件里面,也就是diff左边的文 件,使得老文件和新文件一样
diff [选项] 老文件 新文件
patch [选项] 老文件
比较两个文件: diff old.file new.file
生成补丁文件: diff oldfile new.file > 1.patch
将老文件打补丁: patch -i 1.patch old.file
还原补丁: patch -R -i 1.patch old.file
VIM编辑器
关闭文件
q: 退出, 在没有改变文件内容的情况下推出
q!:不保存强制退出
wq:保存退出
光标的跳转
h , l :左 右
k , j: 上 下
行首行尾跳转
^:跳转至行首的第一个非空白字符
O:跳转至行首
$:跳转至行尾
行间跳转
数字+G:跳转至(数字)行
1G或gg:跳转至第一行
G:跳转至最后一行
删除命令
d:删除命令,可以结合光标跳转字符,实现范围删除
dd:删除光标所在行的整行
粘贴命令
p:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方
P:与p相反
复制命令(yank)
y:表示赋值,与d命令相似
yy:复制一整行
1yy:赋值1行
撤销(undo)操作
u :撤销之前的操作
VIM末行模式(难点)
1)地址定界
:start_pos[,end_pos]
#: 特定的第#行,例如5 为第五行
.: 当前行
$:最后一行
#,#:指定行范围,左侧为起始行
#,#+:指定行范围,右侧为左侧行的偏移量 ,例如:3,+7
%:全文
/pattern/:第一次被模式所匹配到的行
2:可实现编辑操作 ,同编辑命令一同使用
d:表示直接删除,要求直接跟在地址定界符号的后面, 例如::.,$d 表示当前行到最后一行删除。
y:用来复制地址定界匹配到的行
c:用来修改地址定界匹配到的行
w /path/to/file :将范围内的文本保存至文件中
r /path/to/file:将指定的文件的文本插入指定位置
3.查找
/xxx :向下查找xxx,然后按n键会继续向下匹配
?xxx :向上查找xxx,然后按n键会继续向上匹配
4.查找和替换
格式:地址递接符s/要查找的内容 /要替换的内容/修饰符
要查找的内容:可以用正则表达式
替换的内容:不能使用正则表达式,但是可以引用
\1 :表示引用第一个括号匹配的内容
\2 :表示引用第二个括号匹配的内容
& :引用整个模式匹配的文本
修饰符
i :忽略大小写
g :全局替换。
分隔符: # 、 s、 @ 、
======================================================
例题
======================================================
1 . 复制/etc/grub2.cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的行首的空白字符
2 :复制/etc/rc.d/init.d/functions文件至/tmp目录中,用查找替换命令为/tmp/functions文件的每一个空白字符开头的行的首行加上#
3 . 为/tmp/grub2.cfg文件的前三行的行首加上#号
4 . 将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为ennabled=1,所有的gpgcheck=0替换为gpgcheck=1
=======================================================
答案
=======================================================
1. :%s/ ^[[:space:]]\+ //
2. :%s/^[[:space:]]\+ / \#& /
3. :1,3s/^. / \#& /
4. :%s / \(enabled\|ennabled\)=0/ \1=1 /
=======================================================
正则表达式-linux基础的更多相关文章
- 原来今天是感恩节-Linux基础继续&MySQL和PHP
hi 原来今天是感恩节.虽然一直没有过这个节日的习惯,但仅仅是听到感恩的消息,都能想到一幅幅画面.愿大家安好! 下午开题会议还是有所收获,悄悄的,就变向那个不喜欢自己的人了. 一.Linux基础(二) ...
- Linux基础入门
第一节,linux系统简介 一.实验内容 了解 Linux 的历史,Linux 与 Windows 的区别等入门知识. 二.实验要求 阅读linux简介与历史 三.实验步骤 (一).Linux 为何物 ...
- Linux基础与Linux下C语言编程基础
Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...
- Linux基础入门学习笔记20135227黄晓妍
学习计时:共24小时 读书:1小时 代码:8小时 作业:3小时 博客:12小时 一.学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用L ...
- Linux 基础入门----推荐课程
Linux 基础入门课程:https://www.shiyanlou.com/courses/1 很好的一门Linux基础课,精炼.简洁!推荐! 课程内容: 第1节 Linux 系统简介 https: ...
- Linux 基础(5)
Linux 基础 (五) 一.shell相关知识 shell一般代表两个层面的意思,一个是命令解释器,比如BASH,另外一个就是shell脚本.通过解释器的角度来理解shel 命令分为: ==> ...
- 面试题-linux基础
Linux基础和git linux的基础命令(怎么区分一个文件还是文件夹) ls -F 在显示名称的时候会在文件夹后面添加“/”, 在文件后面加“*” 日志以什么格式,存放在哪里?日志可以存储在“/ ...
- linux 基础 文件系统 用户权限
描述Linux系统的启动过程? 1.开机自检 BIOS 2.MBR引导 3.GRUB菜单 4.加载内核 5.运行init进程 6.从/etc/inittab读取运行级别 7.根据/etc/rc.sys ...
- Linux基础命令-Nginx-正则表达式( grep sed awk )-Shell Script--etc
Linux基础使用 学习内容博客 内存 查看swap分区信息 > swapon -s 添加swap分区 > mkswap /dev/sdb2 > 激活 swapon -a /dev/ ...
随机推荐
- 华为OJ之尼科彻斯定理
题目详情: 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和. 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 输入:一个整形数字 输出: ...
- linux下使用scp远程传输自动输入密码
由于需要将A服务器的文件 远程传输到B服务器 但是scp命令每次都要手动输入密码 这样脚本执行太繁琐,所以讲A服务器和B服务器互信即可,具体操作如下: 首先在A服务器配置: mkdir -p ~/.s ...
- 初学Python(三)——字典
初学Python(三)——字典 初学Python,主要整理一些学习到的知识点,这次是字典. #-*- coding:utf-8 -*- d = {1:"name",2:" ...
- wordpress设置“固定链接”后,页面404错误的解决方法
Nginx 解决方案: 网上盛传的方法是: 在 /etc/nginx/nginx.conf文件的 loction / {} 中添加 if (-f $request_filename/index.htm ...
- 连续子序列最大和的O(NlogN)算法
对于一个数组,例如:int[] a = {4,-3,5,-2,-1,2,6,-2}找出一个连续子序列,对于任意的i和j,使得a[i]+a[i+1]+a[i+2]+.......+a[j]他的和是所有子 ...
- Linux(8)查看服务器系统信息
查看服务器系统信息 ql@ql:~$ uname -n -r -p -o ql 4.2.0-35-generic x86_64 GNU/Linux ql@ql:~$ 查看linux系统类型和版本 ql ...
- swift 获取文件的Md5值
获取文件的Md5值的方法如下 func md5File(url: URL) -> String? { let bufferSize = 1024 * 1024 do { //打开文件 let f ...
- ACM退役帖 -- 未真正开始也不会结束
2017.5.21,20岁的最后一天,昨天,随着2017年安徽省大学生程序设计竞赛落下帷幕,我也正式退役了ACM了.连ACM区域赛也没去过的我,也许是不够格提出退役ACM这句话的,但对ACM的热爱,虽 ...
- gitbook初体验
前言 在早些天看sec-wiki的时候,看到有同学做了一个ctf-wiki来介绍CTF,让CTF新手能够快速入门,做成了电子书的样子,放在github上面.页面精美.简洁,让人爱不惜手. 想着自己也能 ...
- 今天出现了一个问题,Tomcat 进入localhost:8080正常,进入项目内别的页面都是空白页
经仔细检查发现代码没有任何的问题,经仔细检查找到了原因. 问题原因:拦截器(过滤器)把我的访问请求全都拦下了,我在拦截器里把//chain.doFilter(request, response);这行 ...