- 下面命令将在含有file文件内容如下的目录下进行。
i love python lovelove python loooove I LOVE PYTHON I LOVE pYtHoN py.* 复制代码
sed的选项使用案例
无参数直接使用p(打印)命令
sed "p" file 复制代码
i love python i love python lovelove python lovelove python loooove loooove I LOVE PYTHON I LOVE PYTHON I LOVE pYtHoN I LOVE pYtHoN py.* py.* 复制代码
-n 取消自动打印模式空
- 可能大家会有点蒙是什么意思,这句话是centOS7中世界输入sed给的提示。
- 首先解释一下,使用sed命令时,会先自动打印原来的文本,再输出匹配文本处理结果。
- -n大家可以简单理解不输出原文本,只输出结果。
- 示例:
sed -n "p" file 复制代码
i love python lovelove python loooove I LOVE PYTHON I LOVE pYtHoN py.* 复制代码
- 打印匹配项
sed -n "/python/p" file 复制代码
i love python lovelove python 复制代码
-e 脚本, 添加“脚本”到程序的运行列表
- 就是在逐行处理的时候匹配有多种情况,只有一个不用写-e
- 如 匹配大写的和小写的
sed -n -e '/python/p' -e '/PYTHON/p' file 复制代码
i love python lovelove python I LOVE PYTHON 复制代码
-r 使用拓展正则表达式
sed -nr "/python|PYTHON/p" file sed -nE "/python|PYTHON/p" file # 两种都可以 复制代码
i love python lovelove python I LOVE PYTHON 复制代码
-f 脚本文件, 添加“脚本文件”到程序的运行列表
-i 操作源文件
sed -i 's/love/like/g' file # s是替换 love变成like g是每行的所有匹配字符, # 如果不加g 则会匹配到第一个符合的字符替换了就结束当前行的替换 复制代码
- 没有输出
sed常用的Pattern用法
匹配某行
sed -n "5p" file 复制代码
I LOVE pYtHoN 复制代码
从某行开始匹配到某行
sed -n '2,5p' file 复制代码
lovelove python loooove I LOVE PYTHON I LOVE pYtHoN 复制代码
从某行开始匹配 并设置一个偏移行数
sed -n '2,+2p' file 复制代码
- 处理的行数是从基数开始 偏移量+1 行
lovelove python loooove I LOVE PYTHON 复制代码
处理正则表达式所在的行
sed -n '/^I LOVE/p' file 复制代码
I LOVE PYTHON I LOVE pYtHoN 复制代码
从匹配条件1到的行数开始到 条件2的行 结束
sed -n "/lovelove/,/py\.\*/p" file 复制代码
lovelove python loooove I LOVE PYTHON I LOVE pYtHoN py.* 复制代码
从某行开始到 匹配条件2的行 结束
sed -n "4,/pYtHoN/p" file 复制代码
I LOVE PYTHON I LOVE pYtHoN 复制代码
从匹配条件1到的行数开始到 某行 结束
sed -n "/pYtHoN/, 6s/LOVE/love/gp" file 复制代码
I love pYtHoN 复制代码
注意: 如果是行数范围处理,结束条件如果文件中没有那么就会一直处理到最后一行
sed -n "3,/abc/p" file 复制代码
loooove I LOVE PYTHON I LOVE pYtHoN py.* 复制代码
sed中的编辑命令
p 打印 print
a 行后追加append
sed '/loooove/a bbbbbbbbbb' file 复制代码
i love python lovelove python loooove bbbbbbbbbb I LOVE PYTHON I LOVE pYtHoN py.* 复制代码
i 行前追加
sed '/loooove/i aaaaaaaaa' file 复制代码
i love python lovelove python aaaaaaaaa loooove I LOVE PYTHON I LOVE pYtHoN py.* 复制代码
r 外部文件读入,行后追加
- list文件
1 line 2 line 复制代码
sed '/lovelove/r list' file 复制代码
i love python lovelove python 1 line 2 line loooove I LOVE PYTHON I LOVE pYtHoN py.* 复制代码
w 匹配行写入外部文件
sed -n '/I LOVE/w aaa' file && cat aaa``` 复制代码
- 注意aaa可以不存在 如果以存在 里面的内容会被清除
I LOVE PYTHON I LOVE pYtHoN 复制代码
d 删除
sed '1,3d' file 复制代码
- 执行打印 并不修改源文件 修改源文件需要-i
I LOVE PYTHON I LOVE pYtHoN py.* 复制代码
s/old/new 替换行内第一个old
s/old/new/2 替换行第二个
s/old/new/g 替换行内所有old
s/old/new/2g 替换第二个及后面所有的
s/old/new/ig 替换行内所有的old,忽略大小写
- 替换命令演示
sed 's/o/AA/i2g' file 复制代码
i love pythAAn lovelAAve pythAAn loAAAAAAve I LOVE PYTHAAN I LOVE pYtHAAN py.* 复制代码
sed 's/py/&OOO/ig' file 复制代码
- & 符号是匹配的内容的引用
i love pyOOOthon lovelove pyOOOthon loooove I LOVE PYOOOTHON I LOVE pYOOOtHoN pyOOO.* 复制代码
sed的应用
- 处理一个 Mysql 的配置文件my.conf文本,输入文章有几个段(以 [ ] 为段),每个段有几个配置,
#!/bin/bash # FILE_NAME=./my.cnf function get_all_segments { echo "`sed -n '/\[.*\]/p' $FILE_NAME | sed -e 's/\[//g' -e 's/\]//g'`" } function count_items_in_segment { items=`sed -n '/\['$1'\]/,/\[.*\]/p' $FILE_NAME | grep -v "^#" | grep -v "^$" | grep -v "\[.*\]"` 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 复制代码
- 文本my.conf
# this is read by the standalone daemon and embedded servers [client] port=3306 socket=/tmp/mysql.socket #ThisSegmentForserver [server] innodb_buffer_pool_size=91750M innodb_buffer_pool_instances=8 innodb_buffer_pool_load_at_startup=1 innodb_buffer_pool_dump_at_shutdown=1 innodb_data_file_path=ibdata1:1G:autoextend innodb_flush_log_at_trx_commit=1 innodb_log_buffer_size=32M innodb_log_file_size=2G innodb_log_files_in_group=2 innodb_max_undo_log_size=4G innodb_undo_directory=undolog innodb_undo_tablespaces=95 #thisisonlyforthemysqldstandalonedaemon [mysqld] port=3306 socket=/tmp/mysql.sock basedir=/usr/local/mysql datadir=/data/mysql pid-file=/data/mysql/mysql.pid user=mysql bind-address=0.0.0.0 sort_buffer_size=16M join_buffer_size=16M thread_cache_size=3000 interactive_timeout=600 wait_timeout=600 #ThisSegmentFormysqld_safe [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid max_connections=1000 open_files_limit=65535 thread_stack=512K external-locking=FALSE max_allowed_packet=32M #thisisonlyforembeddedserver [embedded] gtid_mode=on enforce_gtid_consistency=1 log_slave_updates slave-rows-search-algorithms='INDEX_SCAN,HASH_SCAN' binlog_format=row binlog_checksum=1 relay_log_recovery=1 relay-log-purge=1 #usethisgroupforoptionsthatolderserversdon'tunderstand [mysqld-5.5] key_buffer_size=32M read_buffer_size=8M read_rnd_buffer_size=16M bulk_insert_buffer_size=64M myisam_sort_buffer_size=128M myisam_max_sort_file_size=10G myisam_repair_threads=1 lock_wait_timeout=3600 explicit_defaults_for_timestamp=1 innodb_file_per_table=1 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Directory Opus 使用命令编辑器添加 PowerShell / CMD / Bash 等多种终端到自定义菜单
- 我做编辑器这些年:钉钉文档编辑器的前世今生
- 有爱编辑器 1.7.1 发布,mysql 编辑器 GUI
- 小书匠编辑器 6.0.0 发布,好用的 Markdown 编辑器
- 小书匠编辑器 6.0.0 发布,好用的 Markdown 编辑器
- 10个最佳富文本编辑器
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java Servlet & JSP Cookbook
Bruce W. Perry / O'Reilly Media / 2003-12-1 / USD 49.99
With literally hundreds of examples and thousands of lines of code, the Java Servlet and JSP Cookbook yields tips and techniques that any Java web developer who uses JavaServer Pages or servlets will ......一起来看看 《Java Servlet & JSP Cookbook》 这本书的介绍吧!