处理工具:grep sed awk
常用元字符
\ 转义字符。例如:“\!”将逻辑否的!看做普通字符
^ 匹配字符串开始的位置,以…为开头的
$ 匹配字符串结束的位置,以…结束的
. 匹配任意一个字符
- 匹配前面子表达式0词或多次
[list] 匹配list列表中的一个字符,例如:[abc] 、 [a-z] 、 [a-z0-9]
[^list] 匹配任意不再list表中的一个字符;例如: [^a-z] 、 [^0-9]、 [^A-Z0-9]
{n} 匹配前面子表达式n次
{n,} 匹配前面子表达式至少n次
{n,m} 匹配前面子表达式最少n次,最大m次
常见的转义字符
sed命令 格式:sed ‘编辑命令’ 文件1 文件2
常用:-e 指定要执行的命令,只有一个编辑命令时可省略
-n 只输出处理后的行,读入时不显示,不对原文件进行修改
-i 直接编辑原文件,不输出结果
编辑命令格式: /[地址1[,地址2]/操作 ] [参数]
地址:可为行数、正则表达式、$,没有地址代表全文
操作: p 打印(输出)
d 删除(整行)
s 替换(字符串)
c 替换(整行)
r 读取指定文件(到行后)
a append,追加指定内容到行后
i insert , 追加指定内容到行前
w 另存为
n 表示读入下以行内容
H 复制到剪贴板
g 将剪贴板中的内容覆盖到指定行
G 将剪贴板中的内容追加到指定行后
例如:nl l.txt
sed -n ‘10p’ l.txt //输出第10行内容
sed -n ‘2,6p’ l.txt //输出3~6行的内容
cat -n l.txt
例如:sed “p” l.txt 打印
sed -n ‘/hello/p’ l.txt
追加用法总结:
1、a 在匹配行后面追加
2、i 在匹配行前面追加
3、r 将文件内容追加到匹配行后面
4、w 将匹配行写入指定文件
追加用法示例详解:
1、a append
(1)、passwd文件第10行后面追加"Add Line Behind"
sed -i '10a Add Line Begind' passwd
(2)、passwd文件第10行到第20行,每一行后面都追加"Test Line Behind"
sed -i '10,20a Test Line Behind' passwd
(3)、passwd文件匹配到/bin/bash的行后面追加"Insert Line For /bin/bash Behind"
sed -i '/\/bin\/bash/a Insert Line For /bin/bash Behind' passwd
2、i
(1)、passwd文件匹配到以yarn开头的行,在匹配航前面追加"Add Line Before"
sed -i '/^yarn/i Add Line Before' passwd
(2)、passwd文件每一行前面都追加"Insert Line Before Every Line"
sed -i 'i Insert Line Before Every Line' passwd
3、r
(1)、将/etc/fstab文件的内容追加到passwd文件的第20行后面
sed -i '20r /etc/fstab' passwd
(2)、将/etc/inittab文件内容追加到passwd文件匹配/bin/bash行的后面
sed -i '/\/bin\/bash/r /etc/inittab' passwd
(3)、将/etc/vconsole.conf文件内容追加到passwd文件中特定行后面,匹配以ftp开头的行,到第18行的所有行
sed -i '//,18r /etc/vconsole.conf' passwd
4、w
(1)、将passwd文件匹配到/bin/bash的行追加到/tmp/sed.txt文件中
sed -i '/\/bin\/bash/w /tmp/sed.txt' passwd
(2)、将passwd文件从第10行开始,到匹配到hdfs开头的所有行内容追加到/tmp/sed-1.txt
sed -i '10,/^hdfs/w /tmp/sed-1.txt' passwd
总结:
修改用法总结:
1、1s/old/new/
2、5,10s/old/new/
3、10,+10s/old/new/
4、/pattern1/s/old/new/
5、/pattern1/,/pattern2/s/old/new/
6、/pattern1/,20s/old/new/
7、15,/pattern1/s/old/new/
练习例子:
1、修改/etc/passwd中第1行中第1个root为ROOT
sed -i '1s/root/ROOT/' passwd
2、修改/etc/passwd中第5行到第10行中所有的/sbin/nologin为/bin/bash
sed -i '5,10s/\/sbin\/nologin/\/bin\/bash/g' passwd
3、修改/etc/passwd中匹配到/sbin/nologin的行,将匹配到行中的login改为大写的LOGIN
sed -i '/\/sbin\/nologin/s/login/LOGIN/g' passwd
4、修改/etc/passwd中从匹配到以root开头的行,到匹配到行中包含mail的所有行。修改内为将这些所有匹配到的行中的bin改为HADOOP
sed -i '/^root/,/mail/s/bin/HADOOP/g' passwd
5、修改/etc/passwd中从匹配到以root开头的行,到第15行中的所有行,修改内容为将这些行中的nologin修改为SPARK
sed -i '/^root/,15s/nologin/SPARK/g' passwd
6、修改/etc/passwd中从第15行开始,到匹配到以yarn开头的所有行,修改内容为将这些行中的bin换位BIN
sed -i '15,/^yarn/s/bin/BIN/g' passwd
总结:
用法总结:
1、1d
2、5,10d
3、10,+10d
4、/pattern1/d
5、/pattern1/,/pattern2/d
6、/pattern1/,20d
7、15,/pattern1/d
练习例子:
1、删除/etc/passwd中的第15行
sed -i '15d' /etc/passwd
2、删除/etc/passwd中的第8行到第14行的所有内容
sed -i '8,14d' passwd
3、删除/etc/passwd中的不能登录的用户(筛选条件:/sbin/nologin)
sed -i '/\/sbin\/nologin/d' passwd
4、删除/etc/passwd中以mail开头的行,到以yarn开头的行的所有内容
sed -i '/^mail/,/^yarn/d' passwd
5、删除/etc/passwd中第一个不能登录的用户,到第13行的所有内容
sed -i '/\/sbin\/nologin/,13d' passwd
6、删除/etc/passwd中第5行到以ftp开头的所有行的内容
sed -i '5,/^ftp/d' passwd
7、删除/etc/passwd中以yarn开头的行到最后行的所有内容
sed -i '/^yarn/,$d' passwd
典型需求:
1、删除配置文件中的所有注释行和空行
sed -i '/[:blank:]*#/d;/^$/d' nginx.conf
2、在配置文件中所有不以#开头的行前面添加*符号,注意:以#开头的行不添加
sed -i 's/^[^#]/\*&/g' nginx.conf