sed 查询特定内容
查询命令对照表
打印/etc/passwd中第10行的内容
sed -n '10p' /etc/passwd
打印/etc/passwd中第8行开始,到第15行结束的内容
sed -n '8,15p' /etc/passwd
打印/etc/passwd中从第8行开始,然后+5行结束的内容
sed -n '8,+5p' passwd
打印/etc/passwd中开头匹配nginx字符的内容
sed -n '/^nginx/p' /etc/passwd
打印/etc/passwd中开头为root的行开始,到ftp开头的行结束的内容
sed -n '/^root/,/^ftp/p' /etc/passwd
打印/etc/passwd中第8行开始,到包含有/sbin/nologin的内容结束内容
sed -n '8,/\/sbin\/nologin/p' /etc/passwd
打印/etc/passwd中第一个包含/bin/bash内容的行开始,到第5行结束的内容
sed -n '/\/bin\/bash/,5p' /etc/passwd
练习脚本
需求描述: 处理一个类似MYSQL配置文件my.cnf的文本
示例如下:
- 编写脚本实现以下功能:输出文件有几个段,并且针对每个段可以统计配置参数总个数
预想输出结果:
- 1:client 2
- 2: server 12
- 3: mysqld 12
- 4: mysqld_safe 7
- 5: embedded 8
- 6: mysqld-5.5 9
[client]
port =
socket = /tmp/mysql.sock # The MySQL server
[mysqld]
user = mysql
port =
bind-address = 0.0.0.0
socket = /tmp/mysql.sock
datadir = /data/mysql_data
pid-file = /data/mysql_data/mysql.pid
basedir = /usr/local/mysql
tmpdir = /tmp #此开关默认为NULL,即不允许导入导出。
#secure-file-priv = /opt/upload #-------------------------------gobal variables------------------------#
#默认关闭,涉及到timestamp类型的列自动更新的问题
explicit_defaults_for_timestamp =
###transaction_write_set_extraction = XXHASH64 #以便在server收集写集合的同时将其记录到二进制日志。并且是行更改后的唯一标识此标识将用于检测冲突。
###loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212889f856' #组的名字可以随便起,但不能用主机的GTID
###loose-group_replication_start_on_boot = off #为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。
###loose-group_replication_bootstrap_group = off #同上
###loose-group_replication_local_address = '192.168.1.88:33071' #写自己主机所在IP
###loose-group_replication_group_seeds ='192.168.1.88:33071,192.168.1.89:33071,192.168.1.90:33071'
###loose-group_replication_single_primary_mode = off #关闭单主模式的参数
###loose-group_replication_enforce_update_everywhere_checks = on #开启多主模式的参数 skip-external-locking
skip-name-resolve
skip-ssl #memory is 16G
key_buffer_size = 32M
table_open_cache =
table_definition_cache =
sort_buffer_size = 4M
net_buffer_length = 32K
read_buffer_size = 4M
read_rnd_buffer_size = 16M open_files_limit =
thread_cache_size =
query_cache_type =
query_cache_size = 32M
max_write_lock_count =
wait_timeout =
interactive_timeout =
net_read_timeout =
net_write_timeout = max_connections =
max_user_connections =
max_connect_errors =
max_allowed_packet = 512M
back_log =
log_timestamps = system
performance_schema = OFF
character_set_server = utf8mb4 ##当链接数耗尽后,通过设置别用端口,让root可以登录
extra_max_connections =
extra_port = ###让mysql不区分大小写敏感
lower_case_table_names = #explicit_defaults_for_timestamp = #----------------Myisam--------------------------------#
myisam_recover_options = DEFAULT
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 512M
myisam_repair_threads = #if the query is exec time great than 2 seconds, the query will log to slow log if slowlog is enabled.
long_query_time =
slow_query_log = On
slow-query-log-file = /data/mysql_data/slow.log
show_compatibility_56 = on # Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking #----------------------------MySQL Log----------------#
# Replication Master Server (default)
# binary logging is required for replication
log-bin = mysql-bin
expire_logs_days =
log_error = error.log
log_error_verbosity =
log_warnings = # binary logging format - mixed recommended
binlog_format = row
relay-log = mysql-relay-bin
relay-log-index = relay.index
# required unique id between and ^ -
server-id =
#sql-mode = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
#sql-mode = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sync_binlog =
log_slave_updates =
#binlog_checksum = NONE #------------------------------replicate--------------#
#排除不需要同步的库表
#replicate-ignore-db = mysql
#replicate-ignore-db = sys
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = undolog
replicate-ignore-db = for_nagios
replicate-ignore-db = undolog #replicate_wild_ignore_table = mysql.%
#replicate_wild_ignore_table = sys.%
replicate_wild_ignore_table = information_schema.%
replicate_wild_ignore_table = performance_schema.%
replicate_wild_ignore_table = undolog.%
replicate_wild_ignore_table = for_nagios.%
replicate_wild_ignore_table = undolog.% #主主复制需要开启
#auto_increment_offset=
#auto_increment_increment= #GTID模式复制,需要开启如下
gtid_mode = ON
enforce_gtid_consistency = ON #并发复制
slave-parallel-type = LOGICAL_CLOCK
slave-parallel-workers =
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = ON #跳过slave进程启动参数
skip-slave-start #如果实例为从库,则需要设置为on
#read_only = on #skip-grant-tables #--------------------------------------------------------innoDB------------#
innodb_rollback_on_timeout
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /data/mysql_data
innodb_data_file_path = ibdata1:1G;ibdata2:1G:autoextend
innodb_log_group_home_dir = /data/mysql_data
innodb_undo_directory = /data/mysql_data/undolog/
innodb_undo_logs =
innodb_undo_tablespaces = # You can set .._buffer_pool_size up to - %
#innodb_use_sys_malloc =
#innodb_page_size =
innodb_buffer_pool_size = 3G
innodb_buffer_pool_instances =
#innodb_additional_mem_pool_size = 8M # Set .._log_file_size to % of buffer pool size
innodb_log_file_size = 256M
innodb_log_buffer_size = 64M
innodb_log_files_in_group =
#每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认
innodb_flush_log_at_trx_commit =
innodb_lock_wait_timeout =
#启用独立表空间
innodb_file_per_table = #CPU是1颗8核的,那么可以设置
innodb_read_io_threads =
innodb_write_io_threads = #默认是0,则表示没有并发线程数限制,所有请求都会直接请求线程执行,当并发用户线程数量小于64,建议设置innodb_thread_concurrency=,在大多数情况下,最佳的值是小于并接近虚拟CPU的个数
innodb_thread_concurrency =
innodb_max_dirty_pages_pct =
innodb_flush_method = O_DIRECT innodb_purge_threads =
innodb_large_prefix = #参数待测试
#innodb_io_capacity =
#innodb_io_capacity_max = #根据CPU核心数来设定
thread_pool_size =
#thread_handling = pool-of-threads
thread_pool_oversubscribe = #thread_handling = pool-of-threads
thread_pool_stall_limit =
thread_pool_max_threads = #解释: 在启动时把热数据加载到内存。
innodb_buffer_pool_load_at_startup =
#解释: 在关闭时把热数据dump到本地磁盘
innodb_buffer_pool_dump_at_shutdown = ##默认是8M, 如果一次insert数据量比较多的话, 可以适当增加
innodb_autoextend_increment = [mysqldump]
quick
max_allowed_packet = 512M [mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates [myisamchk]
#key_buffer_size = 20M
#sort_buffer_size = 20M
key_buffer_size = 200M
sort_buffer_size = 200M
read_buffer = 2M
write_buffer = 2M [mysqld_safe]
#控制文件打开数的show global status like 'open%file%';比较合适的设置:Open_files / open_files_limit * % <= %
open-files-limit =
log-error = /data/mysql_data/error.log [mysqlhotcopy]
interactive-timeout
my.cnf
根据需求需要编写 2 个函数
- function get_all_segment 获取所有配置项的段名
- function count_items_in_segment 获取所有段名的配置个数
get_all_segment 函数实现思路
找到所有段名
sed -n '/\[.*\]/p' my.cnf | sed -e 's/\[//g' -e 's/\]//g'
.代表任意一个字符,*代表0个或多个字符,.*合起来就是任意字符(包括空) ,-e 可以连着使用多次
mysql_process.sh
#!/bin/bash
# FILE_NAME=/home/roo/Desktop/shell_code/day6/my.cnf
# 获取所有的片段
function get_all_segments
{
echo `sed -n '/\[.*\]/p' $FILE_NAME | sed -e 's/\[//g' -e 's/\]//g'`
} for item in `get_all_segments`
do
echo $item done
count_items_in_segment 函数实现思路
找到指定段中的内容
找到 [client] 段 过滤掉以 # 开头的行和空行 然后过滤掉 [.*] 剩下的就是中间的内容了
sed -n '/\[client\]/,/\[.*\]/p' my.cnf |grep -v '^#' | grep -v '^$' | grep -v '\[.*\]'
统计函数
sed -n '/\[client\]/,/\[.*\]/p' my.cnf |grep -v '^#' | grep -v '^$' | grep -v '\[.*\]' | wc -l
完整的脚本
mysql_process.sh
#!/bin/bash
# FILE_NAME=/home/roo/Desktop/shell_code/day6/my.cnf
# 获取所有的片段
function get_all_segments
{
echo `sed -n '/\[.*\]/p' $FILE_NAME | sed -e 's/\[//g' -e 's/\]//g'`
}
# 统计单个片段 配置行数
function count_items_in_segment
{
# 找到[xxx]并且下一个 [.*] 的项中间的内容就是一段配置
items=`sed -n '/\['$1'\]/,/\[.*\]/p' "$FILE_NAME" | grep -v "^$" | grep -v "^#" | grep -v "\[.*\]"| wc -l`
echo $items
# for 循环打印并计算my.cnf每一行的配置,适合配置项之间没有空格的情况
#index=0
#for item in $items;
#do
# index=`expr $index + 1`
#done #echo $index } number=0
for segment in `get_all_segments`
do
number=`expr $number + 1`
# 将每个片段当做参数传进来计算
items_count=`count_items_in_segment $segment`
echo "$number: $segment $items_count"
done
sed 查询特定内容的更多相关文章
- shell编程系列10--文本处理三剑客之sed利用sed查询特定内容
shell编程系列10--文本处理三剑客之sed利用sed查询特定内容 利用sed查找文件内容: pattern种类: .8p .,10p .,+5p ./regexp/p .,/regexp/p . ...
- linux shell 脚本获取和替换文件中特定内容
1.从一串字符串中获取特定的信息 要求1:获取本机IP:menu.lst为系统镜象的IP配置文件,需要从中获取到本机IP信息(从文件获取信息) timeout title live find --se ...
- shell编程系列13--文本处理三剑客之sed利用sed追加文件内容
shell编程系列13--文本处理三剑客之sed利用sed追加文件内容 追加用法总结: .a 在匹配行后面追加 .i 在匹配行前面追加 .r 将文件内容追加到匹配行后面 .w 将匹配行写入指定文件 追 ...
- Java递归查找层级文件夹下特定内容的文件
递归查找文件 引言 或许是文件太多,想找某个文件又忘记放哪了;又或者是项目改造,需要将外部调用接口进行改造,项目太多,又无法排查.那么怎么快速找到自己想要的内容就是一件值得思考的事情了. 根据特定内容 ...
- 读取同一文件夹下多个txt文件中的特定内容并做统计
读取同一文件夹下多个txt文件中的特定内容并做统计 有网友在问,C#读取同一文件夹下多个txt文件中的特定内容,并把各个文本的数据做统计. 昨晚Insus.NET抽上些少时间,来实现此问题,加强自身的 ...
- OpenXml修改word特定内容
采用OpenXml来修改word特定内容,如下: word: OpenXml修改word之前: OpenXml修改word之后: 代码: string path = @"C:\Users\A ...
- sqlite-按日期分组,根据日期查询详细内容
一.按日期分组 String paramString = "select strftime('%Y-%m-%d',"+DBConfig.RUNNING_LOG_DATE+" ...
- python 操作excel实现替换特定内容
本文介绍使用python语言,借助openyxl库来实现操作excel(xlsx)文件,实现替换特定内容的需求. 目前实现了3个小功能: 1. 全字匹配替换(mode1):(如:全字匹配 yocich ...
- shell编程系列12--文本处理三剑客之sed利用sed修改文件内容
shell编程系列12--文本处理三剑客之sed利用sed修改文件内容 修改命令对照表 编辑命令 1s/old/new/ 替换第1行内容old为new ,10s/old/new/ 替换第1行到10行的 ...
随机推荐
- 【Mybatis】MyBatis之配置多数据源(十)
在做项目的过程中,有时候一个数据源是不够,那么就需要配置多个数据源.本例介绍mybatis多数据源配置 前言 一般项目单数据源,使用流程如下: 单个数据源绑定给sessionFactory,再在Dao ...
- Internet Download Manager 快速下载插件,破解版
下载下来直接双击绿化按钮即可. 软件链接 : https://pan.baidu.com/s/1agK3cLtjJzXcGEgsuv5mVQ 提取码: ckm7
- 海康威视实时预览回调PS流用EasyRTMP向RTMP服务器推流中视频数据处理的代码
在上一篇方案<EasyRTMP结合海康HCNetSDK获取海康摄像机H.264实时流并转化成为RTMP直播推流(附源码)>我们介绍了将海康安防摄像机进行互联网直播的整体方案流程,其中有一个 ...
- Jquery操作表格多出一个内容行
目录 前言 需求 如何监听每一行点击,获取点击id 前后端 问题更新,ajax异步带来的问题 废弃使用HTML拼接 前言 我的前端实在是太差劲了,导致Jquery操作表格多出一个内容行,这个功能我都做 ...
- mssql的update :from语法
一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据.我们先来讨论根据其他表数据更新你要更新的表 一.MS S ...
- Linux习题1
1. GUN的含义是: GNU's Not UNIX . 2. Linux一般有3个主要部分:内核.命令解释层.实用工具. 3.POSIX是可携式操作系统接口的缩写,重点在规范核心与应用 ...
- spark源码阅读 RDDs
RDDs弹性分布式数据集 spark就是实现了RDDs编程模型的集群计算平台.有很多RDDs的介绍,这里就不仔细说了,这儿主要看源码. abstract class RDD[T: ClassTag]( ...
- Python09之range函数(BIF内置函数)
具体语法: range(起始值,结束值,步进值) range() 其属于内置函数,不需要导入其他模块即可使用,直接在Python的IDLE直接可以使用. list(range(0,10)) [0, 1 ...
- 第1章:LeetCode--基础部分
LeetCode刷题指导(不能只实现功能就行需要尽量写最优解): 不可能刷遍所有题,只能通过刷题来恢复写代码的功力,熟悉常用算法(暴力算法.冒泡排序/快速排序.strStr KMP算法.二叉树遍历DF ...
- python 之 数据库(字段的约束条件,表之间的关系)
10.6 约束条件 10.61 not null .default create table t15( id int, name ) not null, sex enum('male','female ...