正则表达式:正则表达式,就是用一种模式,去匹配一类字符串的公式。
正则表达式的解释是用正则表达式引擎来实现的,常用正则表达式引擎有两类:
基本正则、扩展正则。
正则表达式基础:
正则表达式是由一些普通字符和元字符组成。元字符不再表示字符本身,而代表一些特定控制意义。
正则表达式元字符:
基本正则:^ $ . * [] \ \{n,m\}
扩展正则:? + | {n,m} ()
^ 表示开头
^a 以a开头
^b 以b开头
例:显示以r开头的用户名 cut -d: -f1 /etc/passwd | grep ^r
例:显示不以r开头的用户名 cut -d: -f1 /etc/passwd | grep -v "^r"
例:显示 httpd 或 vsftpd 的配置文件,去掉注释
$ 表示结尾
a$ 表示以a结尾
b$ 以b结尾
例:查看本机不允许登录的用户
cat /etc/passwd | grep "nologin$"
. 任意字符
例:第2个字符是a
.a
* 零个或多个
例: 查看每行至少含有2个或以a的行
cat test.txt | grep aaa*
[] 字符范围
例:以a或b开头的行
cat test.txt | grep "^[ab]"
例:显示以数字开头的行
cat test.txt | grep ^[0123456789]
cat test.txt | grep ^[0-9]
要注意的是:如果 ^ 放在[ ] 中不再表示开头,表示的是取反
\ 转义
\{m,n\} 限定字符长度,有m-n个
POSIX 正则表达式集
[[:alpha:]] 任意字母
[[:alnum:]] 任意字母或数字
[[:blank:]] 空格或制表符
[[:digit:]] 0-9的数字
[[:lower:]] 小字字母
[[:upper:]] 大写字母
[[:print:]] 可打印字符
扩展正则元字符:
? 零个或一个
例:显示有2到3个a的行
cat test.txt | egrep aaa?
+ 一个或多个
例:显示至少有3个a的行
cat test.txt | egrep aaa+
| 或
例:显示2或4开头的行
cat test.txt | egrep "^2|^4"
cat test.txt | grep "^[24]"
{} 表出现次数
例:显示行有2到4个a的行
cat test.txt | egrep "a{2,4}"
() 分组
把符合替换的一系列字符分到一组中(打包),然后在后续的命令中用 \1 \2 \3 等去引用它们
grep/egrep 文本搜索
格式: grep 文本 路径
-r 子目录也搜
-v 排除
例:在 /etc 下看看哪个文件下有 sshd
grep sshd /etc/*
grep -r sshd /etc/*
sed (stream editor) 流式编辑器
传统的编辑器,如 vi/vim 交互式的,需要人工去操作,这样功能虽然很强大,但在做编程时,如需要修改一个文件的内容,这样是很难做到的。
而sed 它的工作方式完全不一样,它没有交互,所有的操作都是写在命令中完中,
如:我要删除文件的第2行
格式:sed [option] '[address]{command}' [file_name]
option:
-i 直接在原文件操作,默认在内存中进行
-f file 将操作系统写到命令文件,sed 从文件中读操作命令
-n 不输出
address:
它表示的是操作地址(内容)
可用两种方式来表示address
1、行模式
写具体的行,如 1、2、$
sed '$d' test.txt
sed '1,$d' test.txt --全文删除
2、模式匹配
/匹配模式/ 即用// 把某种特征符(正则表达式)括起来
sed '/^#/d' vsftpd.test
command: 表示要操作的命令
具体命令后面再讲
command 中同时执行多条件的处理
1、将每个命令用参数 -e 连接起来
例:将vsftpd.test 中的注释删除,同时将anonymous_enable改为NO
sed -e '/^#/d' -e '/anonymous_enable=YES/canonymous_enable=NO' vsftpd.test
echo "The tiger" | sed -e 's/tiger/cat/' -e 's/cat/dog/'
2、将sed 命令用分号分隔
echo "The tiger" | sed 's/tiger/cat/;s/cat/dog/'
3、将多条命令写到文件
4、命令分行号,用{} 括起来
echo "The tiger" | sed '{
> s/tiger/cat/
> s/cat/dog/
> }'
sed 操作命令:
s 替换
格式:s/原字符/新字符/参数
参数:
g 一行中所有的都替换,不加的话,只替换一行中的第一个
p 打印
n(1-512) 替换一行中第n次出现的字符
例:把/etc/passwd 中的root改为admin
sed -n 's/root/admin/pg' /etc/passwd
例:把1-10中的 不用登录的用户,改为能登录
sed -n '1,10s/sbin\/nologin/bin\/bash/p' /etc/passwd
例:把第一个字符和第二个字符换掉
[root@t183 test]# sed 's/\(^.\)\(.\)/\2\1/' test.txt
d 删除行
例:删除第2行
sed '2d' test.txt
例:把文件中的空行删除
a 行后追回
i 行前插入
例:sed '5a iiiiiii' test.txt
例:sed '5i iiiiiii' test.txt
c 整行修改(修改的是一行)
例:把第3行改为 my sed test change
例:把vsftpd 文件中的 anonymous_enable 改为 NO,同时增加一行 local_root=/share/ftp
sed -n '/^anonymous_enable/s/YES/NO/p;/^local_enable/a local_root=\/share\/ftp/' vsftpd.test
y 字符变换,对单个字符进行一一替换
例:把a变成A
sed 'y/a/A/' test.txt
= 显示行号
sed '=' /etc/passwd
nq (如3q) 显示多行
sed '3q' /etc/passwd
w 写文件
格式: w 文件名
例:将 vsftpd 的前3行写到一个文件aa中
sed '1,3w aa' vsftpd.test
例:去掉 vsftpd 的注释,将主要内容放到bb中
r 读文件,把其它文件中的内容,复制到当前文件中
例:把bb的内容放到aa中,第2行后
sed '2r bb' aa
! 取反
例: sed -n '/bash$/p' /etc/passwd --打印bash结尾的行
sed -n '/bash$/!p' /etc/passwd --不打印以bash结尾的行
示例:
1、删除文件中每行的第一个字符 sed 's/^.//' test.txt
2、删除文件中每行的第二个字符 sed 's/\(^.\)\(.\)/\1/' test.txt
3、删除文件中每行的最后一个字符 sed 's/.$//' test.txt
4、删除所有带数字的行
sed '/[[:digit:]]/d' test.txt
sed '/[0-9]/d' test.txt
5、把当前的ip地址写到 /etc/sysconfig/network-scripts/ifcfg-eth0
大致过程:
1) 获得当前的IP地址(不能是眼睛看的,要用程序去获取)
ifconfig eth0 | grep "inet addr" | cut -d: -f2 |
cut -d " " -f1
-------------------------------------------
ifconfig 查看、修改ip(临时性修改)
查看
ifconfig [网络接口名]
如:ifconfig eth0
临时性修改:
ifconfig [网络接口名] ip地址
如:ifconfig eth0 10.1.1.xxx
永久性修改为静态IP:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static --静态的,如果是DHCP就是动态
......
IPADDR=10.1.1.178 --如果是静态的必须有这一行,DHCP会忽略这一行
ONBOOT=yes
修改后,要重启网络服务:
service network restart
-------------------------------------------------------
6、写个程序 修改主机名,修改时,从键盘输入主机名,然后在临时修改,再永久修改(即把主机名写到配置文件)不能用 vim ,要在程序中用sed 来实现。
hostname --查看主机名
hostname xxx.uplooking.com --临时修改
要永久性修改要把 hostname=xxx.uplooking.com 写到配置文件
/etc/sysconfig/network
- ABP(现代ASP.NET样板开发框架)系列之11、ABP领域层——仓储(Repositories)
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之11.ABP领域层——仓储(Repositories) ABP是“ASP.NET Boilerplate Proj ...
- WebStorm 11、PhpStorm 10免费激活(不需要注册码)
之前分享的WebStorm9.WebStrom10.PhpStorm9注册码生成网站已经被站长关了,比较遗憾!http://my.oschina.net/ximidao/blog/486353 现在官 ...
- 11、借助POI实现Java生成并打印excel报表(2)
11.POI打印功能 11.1.常用模块形式: HSSFPrintSetup printSetup = sheet.getPrintSetup(); printSetup.setVResolution ...
- 11、jeecg 笔记之 界面常用整理 - 方便复制粘贴
1.datagrid 操作按钮(按钮样式) 操作按钮的显示主要依赖于 <t:dgCol title="操作" field="opt" ></ ...
- 计算机网络六:无线局域网、IEEE 802.11、WIFI和蓝牙
无线局域网.IEEE 802.11.WIFI和蓝牙 ㈠无线局域网 1.定义 无线局域网络(Wireless Local Area Networks),简称WLAN.它是相当便利的数据传输系 ...
- 11、python阶段测试
1.执行Python脚本的两种方式 如果想要永久保存代码,就要用文件的方式 如果想要调试代码,就要用交互式的方式 2.Pyhton单行注释和多行注释分别用什么? 单行注释:# 多行注释: '' &qu ...
- 阅读<构建之法>第三10、11、12章并提出问题
<构建之法>第10.11.12章 第10章: 问题:对我们了解了用户的需求后,但是我们想法和做出来的软件会和用户的需求有偏差,比如风格.界面的修饰等等,那么我们程序猿怎样才能让自己的想法更 ...
- mysql数据库优化课程---11、mysql普通多表查询
mysql数据库优化课程---11.mysql普通多表查询 一.总结 一句话总结:select user.username,user.age,class.name,class.ctime from u ...
- Linux课程---11、Linux中软件安装和调试
Linux课程---11.Linux中软件安装和调试 一.总结 一句话总结: 启动过程:1.安装软件,2.修改配置文件,3.启动服务 查看过程:4.查看进程,5.查看端口 关闭过程:6.关闭软件,7. ...
随机推荐
- sql 代码优化
1. where 执行顺序:右→左,筛选多的放右边:计算难度小的放右边,sql老版本(只在基于规则的优化器中有效,新版本基于代价不存在这个问题): 2. 少用子查询: 3. union快,表结构得一致 ...
- [C3W1] Structuring Machine Learning Projects - ML Strategy 1
第一周:机器学习策略(1)(ML Strategy(1)) 为什么是ML策略?(Why ML Strategy) 大家好,欢迎收听本课,如何构建你的机器学习项目也就是说机器学习的策略.我希望通过这门课 ...
- 《LSM算法原理》
记内存中的树为T0, 硬盘上的树按时间顺序,记做T1, ..., Tk 读: T0 Tk -> Tk-1 -> ... -> T0 写 T0 T0超过一定大小后,插入硬盘变为Tk+1 ...
- LG3237 「HNOI2014」米特运输 树形DP
问题描述 LG3237 题解 问题转化为: 要求将这棵树,满足 结点 \(x\) 所有孩子权值相等 结点 \(x\) 权值等于所有孩子权值和 将乘法转化为 \(\log\) 加法 \(\mathrm{ ...
- linux 安装盘作为 repo
1) CentOS 7.7 安装完之后, /etc/yum.repos.d 下面有很多.repo. 其中有一个CentOS-Media.repo. 编辑文件把enabled 改成 1 . 然后把其他. ...
- FFT_应用和例题
卷积 现有两个定义在 N 上的函数 \(f(n),g(n)\),定义 \(f\) 和 \(g\) 的卷积(convolution)为 \(f \otimes g\) \[ (f \otimes g)( ...
- c#菜单动态合并 z
说明 在程序中经常使用弹出菜单,并且一个窗体中可以存在多个弹出菜单.开发过MDI窗体的读者可能都知道,当MDI子窗体最大化时,子窗体和主窗体的菜单能够自动的合并.这是如何实现的呢?本例实现了将两个弹出 ...
- PHP数学扩展函数BC
需要准确高精度计算的时候,如果直接计算会出现不准确的情况,要用BC函数. bcadd — 2个任意精度数字的加法计算 bccomp — 比较两个任意精度的数字 bcdiv — 2个任意精度的数字除法计 ...
- 明解C语言 中级篇 第三章答案
练习3-1 /* 猜拳游戏(其四:分割函数/显示成绩)*/ #include <time.h> #include <stdio.h> #include <stdlib.h ...
- C# 5.0 新特性之异步方法(AM)
Ø 前言 C# Asynchronous Programming(异步编程)有几种实现方式,其中 Asynchronous Method(异步方法)就是其中的一种.异步方法是 C#5.0 才有的新特 ...