固化命令的方式
用户状态登录执行bash的顺序(用户登录自动执行)
#/etc/profile
#/etc/profile.d
#/root/.bash_profile
#/root/.bashrc
#/etc/bashrc
非登录状态执行bash的顺序(/bin/bash就自动执行)
#/root/.bashrc
#/root/.bashrc
#/root/.bash_profile
什么是正则
正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。
在linux中,通配符是由shell解释的,而正则表达式则是由命令解释的,下面我们就为大家介绍三种文本处理工具/命令:grep、sed、awk,它们三者均可以解释正则。
sed
sed流编辑器 stream editer,是以行为单位的处理程序
-n静默模式不输出
-e扩展模式,一行有多个命令时
-i 修改文件,将内容写进文件
-f 将“”内的规则写到文件内
-r扩展模式
定址的方法 1.数字 2.正则
1.数字
1单行
1,3 范围从第一行到第三行
2,+4 匹配行后若干行
4,~3 从第四行到下一个3的倍数行
2~3 第二行起每间隔三行的行
$ 尾行
1! 除了第一行以外的行
2.正则
正则必须用//包裹起来 /正则命令/命令 #举例sed "/^root/d” 删除 root开头的行
扩展正则需要用 -r 参数或转义
^ 行首
$ 行尾
. 除了换行符以外的任意单个字符
* 前导字符的零个或多个
.* 所有字符
[] 字符组内的任一字符
[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
^[^] 非字符组内的字符开头的行
[a-z] 小写字母
[A-Z] 大写字母
[a-Z] 小写和大写字母
[0-9] 数字
< 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
> 单词尾
? 前导字符零个或一个
+ 前导字符一个或多个
增删改
a 追加 sed “3a 11111111” 在第三行后面一行追加11111111
c 替换 sed “3c 11111111” 将第三行替换为11111111 sed "/^root/c 11111111 " 将root开头的行替换为11111111
i 前插 sed “3i 11111111” 在第三行后面一行前插11111111
d 删除 sed “3d” 删除第三行 “1,3d”删一到第三行 “1d;3d”删第一行和第三行
s 字符串替换 sed "s/old/new/" 如果匹配行有两个匹配内容只改第一个 sed "s/old/new/g" 全部改
sed "4s/old/new/" 数字定址,替换第四行 sed "/^root/ s/old/new/" 正则定址,替换以root开头的行
sed -r "s/([^a-z])([a-z]+)$/1/" 删除行尾一个单词
sed -r "s/([^a-z])([a-z]+)([^a-z])([a-z]+)$/3214/" 交换行尾两个单词
输入输出
p 打印匹配的行 一般和 -n 参数连用,以屏蔽默认输出 sed -n “3d”只打印第三行
r 从文件中读入
w 写入到文件中
控制流
! 命令取反 例: 1!d 删除第一行以外的行
{} 命令组合 命令用分号分隔 {1h;G} 可以理解为 -e 参数的另一种写法
= 打印行号(输入行的号码,而非处理的次数行号) 例如: sed -n '2{=;p}' infile
n 读入下一行到模式空间 例:'4{n;d}' 删除第5行
N 而是追加下一行到模式空间,再把当前行和下一行同时应用后面的命令
(正则表达式及字符处理)
目标文件/etc/passwd,使用grep命令或egrep
1.显示出所有含有root的行:
grep 'root' etc/passwd
2.输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容:
grep -C 'bash' etc/passwd
3. 显示出有多少行含有nologin。
grep -c 'nologin' /etc/passwd
4.显示出那些行含有root,并将行号一块输出。
grep -n 'root' /etc/passwd
5.显示出文件中
6.新建用户
abominable
abominate
anomie
atomize
编写正则表达式,将他们匹配出来
egrep 'a.omi(nabl|nat|z|)e' /etc/passwd
7.建四个用户
Alex213sb
Wpq2222b
yH438PIG
egon666
egon
过滤出用户名组成是字母+数字+字母的行
egrep '^[a-Z]+[0-9]+[a-Z]+' /etc/passwd
8.显示出/etc目录下所有包含root的文件名
ls -R /etc |grep 'root' 或者tree |grep 'root'
9. 过滤掉/etc/ssh/sshd_config内所有注释和所有空行
grep -v '^#' /etc/ssh/sshd_config |grep -v '^ *$'
作业三:Sed作业:以/etc/passwd文件为模板
sed -n 静默模式,不输出
sed -f 文件(里面写上匹配的规则) test
1,删除文件每行的第一个字符。
sed -r 's/^(.)(.*)/2/' /etc/passwd
2,删除文件每行的第二个字符。
sed -r 's/^(.)(.)(.*)/13/' /etc/passwd
3,删除文件每行的最后一个字符。
sed -r 's/(.*)(.)$/1/' /etc/passwd
4,删除文件每行的倒数第二个字符。
sed -r 's/(.*)(.)(.)$/13/' /etc/passwd
5,删除文件每行的第二个单词。
sed -r 's/^([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)/124/' /etc/passwd
6,删除文件每行的倒数第二个单词。
sed -r 's/^([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)&/134/' /etc/passwd
7,删除文件每行的最后一个单词。
sed -r 's/^([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)&/123/' /etc/passwd
8,交换每行的第一个字符和第二个字符。
sed -r 's/^[a-Z][a-Z]([a-Z]+)/213/' /etc/passwd
9,交换每行的第一个字符和第二个单词。
sed -r 's/^(.)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)/42315/' /etc/passwd
10,交换每行的第一个单词和最后一个单词。
sed -r 's/^([a-Z]+)([^a-Z]+)(.*)([^a-Z]+)([a-Z]+)$/52341/' /etc/passwd
11,删除一个文件中所有的数字。
sed -r 's/[0-9]//g' /etc/passwd
12,删除每行开头的所有空格。
sed -r 's/^ *//g' /etc/passwd
13,用制表符替换文件中出现的所有空格。
sed -r 's/ / /g' /etc/passwd
14,把所有大写字母用括号()括起来。
sed -r 's/[A-Z]/(&)/g' /etc/passwd
15,打印每行3次。
sed 'p;p' /etc/passwd
16,只显示每行的第一个单词。
sed -r 's/(^[a-Z]+)([^a-Z]+)(.*)/1/' /etc/passwd
17,打印每行的第一个单词和第三个单词。
sed -r 's/(^[a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)(.*)/15/' /etc/passwd
18,用命令获取格式为 mm/yy/dd 的日期格式,结合管道,将其换成 mm;yy;dd格式
date +%m/%Y/%d | sed -r 's/[/]/;/g'