sed文本处理

基础介绍

  • 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
      在这里插入图片描述

此时原文件并没有被修改
在这里插入图片描述

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: 获取配置项的个数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值