基础介绍
- sed(Stream Editor),流编译器。对标准输出或文件逐行进行处理
语法格式
- 第一种格式:stdout | sed [option] “pattern command”
- 第二种格式:sed [option] “pattern command” file
sed的选项
选项 | 含义 |
---|---|
-n | 只打印模式匹配行 |
-e | 直接在命令行进行sed编辑,默认选项 |
-f | 编译动作保存在文件中,指定文件执行 |
-r | 支持扩展正则表达式 |
-i | 直接修改文件内容 |
- 新建sed.txt文件
I love python
I love PYTHON
Hadoop is bigdata frame
p :输出打印输出
对每一行执行p命令,输出每一行。默认就会执行p命令
对每一行执行p命令,输出每一行。只对符合当前的行进行打印。
// : 匹配字符串或者正则表达式
- 匹配python或者PYTHON的行
多个命令使用-e
- -f
创建文件edit.sed
/python/p
该命令跟sed -n ‘/python/p’ sed.txt 命令是一样的效果
- -r
- -i
-
- 将love改成like
- 将love改成like
此时原文件并没有被修改
s/old/new/g : 将文本中的old换成new
-i 才会执行
pattern详解
- pattern用法表
匹配模式 | 含义 |
---|---|
10command | 匹配到第10行 |
10,20command | 匹配从第10行开始,到第20行结束 |
10,+5command | 匹配从第10行开始,到第16行结束 |
/pattern1/command | 匹配到pattern1的行 |
/pattern1/,/pattern2/command | 匹配到pattern1的行开始,到匹配到pattern2的行结束 |
10,/pattern1/command | 匹配从第10行开始,到匹配到pattern1的行结束 |
/pattern1/, 10command | 匹配到pattern1的行开始,到第10行匹配结束 |
pattern用法
-
LineNumber --------------------------------直接指定行号
sed -n "17p" file
打印file文件的第17行
-
StartLine,EndLine------------------------指定起始行号和结束行号
sed -n "10,20p" file
打印file文件的第10行到20行
-
StartLine,+N----------------------------------指定起始行号,然后后面N行
sed -n "10,+5p" file
打印file文件从第10行开始,往后加5行结束
-
/pattern1/--------------------------------------正则表达式匹配的行
sed -n "/^root/p" file
打印file文件中以root开头的行
-
/pattern1/,/pattern2/--------------------------从匹配到pattern1的行到匹配到pattern2的行
sed -n "/^ftp/,/^mail/p" file
从ftp开头开始,到mail开头为止
-
LineNumber,/pattern1/------------------------从指定行号开始匹配,知道匹配到pattern1为止
sed -n "15,/^root/p" file
从第15行开始,到匹配到root开头为止 -
/pattern1/,LineNumber ----------------------从pattern1匹配的行开始,直到匹配到LineNumber行为止
sed -n "/root/,5p" file
打印file文件匹配的root行开始,直到第5行结束
编辑命令对照表
类别 | 编辑命令 | 含义 |
---|---|---|
查询 | p | 打印 |
增加 | a | 行后增加 |
i | 行前增加 | |
r | 外部文件读入,行后追加 | |
w | 匹配行写入外部文件 | |
删除 | d | 删除 |
修改 | s/old/new | 将行内第一个old替换成new |
s/old/new/g | 将行内全部的old替换成new | |
s/old/new/2g | 将行内从第二个开始到剩下的所有的符合条件的字符串 | |
s/old/new/ig | 将行内全部的old替换成new,忽略大小写 | |
= | 显示行号 |
查询命令对照表
查询命令 | 含义 |
---|---|
1p | 打印第一行内容 |
1,10p | 打印第一行到第10行的内容 |
1,+5p | 打印第一行到第6行的内容 |
/pattern1/p | 打印每行中匹配到pattern1的内容 |
/pattern1/,/pattern2/p | 打印匹配到pattern1的行直到 匹配到pattern2的所有行内容 |
/pattern1/,10p | 打印匹配到pattern1的行到10行的所有行内容 |
10,/pattern1/p | 打印第10行直到匹配到pattern1的所有行内容 |
- 打印/etc/password中第10行的内容
sed -n '10p' /etc/password
- 打印/etc/password中从第8行开始,到15行结束的内容
sed -n '8,15p' /etc/password
- 打印/etc/password下从第8行开始,然后+5行结束的内容
sed -n '8,+5p' /etc/password
- 打印/etc/password中开头匹配hdfs字符串的内容
sed -n '/^hdfs/p' /etc/password
- 打印/etc/password中开头为root的行开始,到开头为hdfs的行结束的内容
sed -n '/^root/,/^hdfs/p' /etc/password
- 打印/etc/password下第8行开始到含有/sbin/nologin的内容结束的行的内容
sed -n '8,/\/sbin\/nologin/p' /etc/password
- 打印/etc/password中第一个包含/bin/bash内容的行开始,到第5行结束的内容
sed -n '/\/bin\/bash/,5p' /etc/password
脚本练习1
- 需求描述:处理一个类似MySQL配置文件my.cnf的文本,示例如下:编写脚本实现一下功能:输出文件有几个段,并针对每个段可以统计配置参数总个数。
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
character-set-server=utf8
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port = 3306
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port=3306
server-id = 1
socket=/tmp/mysql.sock
character-set-server = utf8
log-error = /var/log/mysql/error.log
pid-file = /usr/local/mysql/data/mysql.pid
general_log = 1
skip-name-resolve
#skip-networking
back_log = 300
max_connections = 1000
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128
max_allowed_packet = 4M
binlog_cache_size = 1M
max_heap_table_size = 8M
tmp_table_size = 16M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 28M
key_buffer_size = 4M
thread_cache_size = 8
query_cache_type = 1
query_cache_size = 8M
query_cache_limit = 2M
ft_min_word_len = 4
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 30
performance_schema = 0
explicit_defaults_for_timestamp
#lower_case_table_names = 1
myisam_sort_buffer_size = 8M
myisam_repair_threads = 1
interactive_timeout = 28800
wait_timeout = 28800
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES
[mysqldump]
quick
max_allowed_packet = 16M
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M
- 预想输出结果
mysqld:4
client:2
mysqld:43
mysqldump:2
myisamchk:4
function get_all_segment : 获取所有段
function count_items: 获取配置项的个数