Linux常用命令——sed

sed 字符流编辑器

sed 是Stream Editor(字符流编辑器)的缩写,简称刘编辑器。
sed 是操作、过滤和转换文本内容的强大的工具。常用功能包括对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过滤(过滤制定字符串)取行(取出指定行)
语法格式:sed【选项】【sed内置命令字符】【输入文件】
注意:
1.sed 以及后面的选项、命令和输出文件,每个元素之间都要至少要有一个空格

参数选项:

参数 说明
-i 直接修改文件内容
-n 静默模式,仅打印和sed命令匹配的内容
-r 支持扩展表达式(预设是基础正规表示法语法)
-e 直接在命令行模式上进行sed动作编辑,此为默认选项
-f 将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作
-V -V或--version 显示版本信息

动作参数说明:

参数 简述 详情
a\ 新增 在当前行下面插入文本
c\ 取代 把选定的行改为新的文本
i\ 插入 在当前行上面插入文本
d 删除 删除选择的行
p 打印 打印模板块的行,通常 p 会与参数 sed -n 一起运行
s 取代 替换指定字符,例如 1,20 s/old/new/g
g 替换 表示行内全面替换
y 更新 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
r 文件 从目标文件中读取

sed 元字符集

字符集 说明 案例
\^ 锚定行的开始 如:‘^grep‘ 匹配所有以 grep 开头的行
$ 锚定行的结束 如:‘grep$‘ 匹配所有以 grep 结尾的行
. 匹配一个非换行符的字符 如:‘gr.p‘ 匹配 gr 后接一个任意字符,然后是 p
* 匹配零个或多个先前字符 如:‘ *grep‘ 匹配所有一个或多个空格后紧跟 grep 的行。 .* 一起用代表任意字符
[ ] 匹配一个指定范围内的字符 如:‘[Gg]rep‘ 匹配 Grep 和 grep
[^ ] 匹配一个不在指定范围内的字符 如:‘[^A-FH-Z]rep‘ 匹配不包含 A-F 和 H-Z 的一个字母开头,紧跟 rep 的行
\(..\) 标记匹配字符 如:‘(love)‘,love 被标记为1
& 保存搜索字符用来替换其他字符 如s/love/&/,love这成love
\< 锚定单词的开始 如:‘\<grep‘ 匹配包含以grep开头的单词的行
\> 锚定单词的结束 如:‘grep\>‘ 匹配包含以grep结尾的单词的行
x{m} 连续重复字符 x,m 次 如:‘o{5}‘ 匹配包含连续5个o的行
x{m,} 连续重复字符 x,至少 m 次 如:‘o{5,}‘ 匹配至少连续有5个 o 的行
x{m,n} 连续重复字符 x,至少 m 次,不多于 n 次 如:‘o{5,10}‘ 匹配连续 5-10 个 o 的行
[:digit:] 所有数字, 相当于0-9 如:[0-9]---> [[:digit:]]
[:lower:] 所有的小写字母 如:[a-z]---> [[:lower:]]
[:upper:] 所有的大写字母 如:[A-Z]---> [[:upper:]]
[:alpha:] 所有的字母 如:[A-Za-z]---> [[:alpha:]]
[:alnum:] 非特殊符号,相当于0-9a-zA-Z 如:[0-9a-zA-Z]---> [[:alnum:]]
[:space:] 空白字符 如:[ ]---> [[:space:]]
[:punct:] 所有标点符号 如:[^0-9a-zA-Z]---> [[:punct:]]

注意:扩展正则表达式必须结合 -r 选项

常用:命令 sed 替换用法举例

源文件

示例:

序号 指令 说明
sed -i ‘/news/c HAPPY‘ bak.txt 匹配 news 字符的行,替换成 HAPPY 的行
sed -i ‘s#static#stop#‘ bak.txt 把 static 字符替换成 stop 字符
sed -i ‘/server/s#68\.1#76\.3#‘ bak.txt 匹配 server 的字符行,把 68.1 替换成 76.3 由于点号有特殊意义所有需要转义
sed -i ‘s#lp#LP#2g‘ bak.txt 把所有匹配到 的行中第二次及以后出现的 on 字符替换成 ysg 字符
sed -i ‘s#root#tom#2p‘ bak.txt 把所有匹配到字符 bin 的行中第二次出现的 root 替换成 tom 字符,并再生产与匹配行同样的行
sed -i ‘s#games#GAMES#2‘ bak.txt 把所有匹配到字符 usr 的行,第三次出现的 usr 替换成 USR 字符
sed -i ‘/sys/{s#/dev#/log#;s#3#6#g}‘ bak.txt 匹配字符 sys 的行,把字符 dev 替换成 log 字符,且把 3 替换成 6
sed -i ‘s#nologin#(&)#g‘ bak.txt 把 nologin 用括号括起来,& 表示引用前面匹配的字符
sed -i ‘s/sys:x/#&/g‘ bak.txt 匹配字符 sys:x 的行前面添加 # 号
sed -i ‘/tcp/s#;# #g‘ bak.txt 匹配字符 tcp 的行,把分号替换成空,也可用于去注释 # 号

改变后的

常用:命令 sed 简单变量举例

引用变量


注意:当sed命令也有默认变量时,在去引用自己定义的变量会出现语法错误
注意:当sed命令里面没有默认的变量时可以把单引号改成双引号当sed命令里面有默认的变量时,那自己定义的变量需要加单引号,且sed里面的语句必须用单引

进阶:命令 sed 的高级使用

案例一
正在操作的内容行写入到文件中


指定行号添加内容

案例二
获取域名信息
源文件与结果样式
cat yuming.txt|sed ‘s#http:\/\/##;s#\/.*##‘|sort|uniq -c|sort -rn
awk -F/ ‘{print $3}‘ yuming.txt|sort -r|uniq -c|awk ‘{print $1"\t",$2}‘

命令参数用法举例

案例一
参数 -n 举例

注意:在不加 -n 时,检索到的行重复打印两遍,原因是 sed 默认会打印文件中的所有行


注意:当使用多个 sed 编辑命令时,需用 {} 并用分号进行分隔

案例二
动作参数 -s 举例
在匹配的行尾添加 book 字符


在 is 字符前添加 ysg


动作参数 -i 举例

动作参数 -a 举例

动作参数 -d 举例

注意:在不适用 -i 参数时,原文本不会被修改,当使用 -i 参数时表示写入并修改文本,参数 -e 表示直接在命令行模式上进行sed动作编辑,此为默认选项
案例三
sed 的正则表达式举例

举例 说明
sed ‘5 q‘ /etc/passwd 打印前 5 行
sed -n ‘1,3p‘ /etc/passwd 打印 1-3 行
sed -n ‘/r*t/p‘ /etc/passwd 打印匹配r有 0 个或者多个,后接一个 t 字符的行
sed -n ‘/.r.*/p‘ /etc/passwd 打印匹配有r的行并且r后面跟任意字符
sed -n ‘/o*/p‘ /etc/passwd 打印o字符重复任意次
sed -n ‘/o\{1,\}/p ‘ /etc/passwd 打印o字重复出现一次以上
sed -n ‘/o\{1,3\}/p ‘ /etc/passwd 打印o字重复出现一次到三次之间以上
sed -n ‘/^#/!p‘ /etc/vsftpd/vsftpd.conf 打印以 # 开头的行,进行取反,已达到过滤注释的效果
sed -n ‘/^#/!{/^$/!p}‘ /etc/vsftpd/vsftpd.conf 匹配以 # 开头的行,进行取反,然后在其结果中对空格开头的行进行取反,表示过滤空格与注释
sed -e ‘/^#/d‘ -e ‘/^$/d‘ /etc/vsftpd/vsftpd.conf 删除匹配的空格行与 # 号开头的行,sed支持对单个文件进行多条件操作

原文地址:http://blog.51cto.com/12384628/2164044

时间: 2024-10-20 08:21:51

Linux常用命令——sed的相关文章

Linux 常用命令sed/awk/grep及正则表达式

linux命令sed和awk sed 主要功能 sed,stream editor.是一个"非交互式"字符流编辑器.输入流通过程序并输出到标准输出端. sed主要用来自动编辑一个或者多个文件(替换,插入,删除,追加,更改) 常见应用 抽区域 匹配正则表达式 比较域 增加,附加,替换 执行过程 sed一次处理一行或多行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区

linux常用命令-sed

sed基本用法:sed: Stream EDitor 行编辑器 (全屏编辑器: vi) sed: 将文本读入内存空间,模式空间默认不编辑原文件,仅对模式空间中的数据做处理:而后,处理结束后,将模式空间打印至屏幕: sed [options] 'AddressCommand' file ... -n: 静默模式,不再默认显示模式空间中的内容 -i: 直接修改原文件 -e SCRIPT -e SCRIPT:可以同时执行多个脚本 -f /PATH/TO/SED_SCRIPT  sed -f /path

Linux常用命令大全

系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo 显示CPU info的信息 cat /proc/interrupts 显示中断 cat /proc/meminfo 校验

(转)linux常用命令

原地址:http://www.cnblogs.com/svage/p/3700122.html 1.删除目录及子目录下的 .svn目录 find . -type d -name ".svn" | xargs rm -rf 2./tmp 目录的权限 drwxrwxrwt rwt的意思是:对目录有执行权限,但不能删除,即sticky bit rwx : 可读可写可执行 4+2+1 3.改变群组.用户.权限 chgrp   群组名   改变的目录 groupadd -g gid gname

linux常用命令整理(五):shell基础

大家好,我是会唱歌的程序猿------ 最近在学习linux,闲暇之余就把这些基本的命令进行了整理,希望大家能用的上,整理的的目的是在忘了的时候翻出来看看^?_?^,前后一共分为五个部分: linux基本命令整理(一):常用命令 地址:http://www.cnblogs.com/devinCat/p/7247824.html linux基本命令整理(二):用户.用户组.文件系统和网络 地址:http://www.cnblogs.com/devinCat/p/7247847.html linux

Linux常用命令收集

Linux常用命令:if.for.which.ps.grep.netstat.lsof.head.tail.sed.awk.cut.sort.uniq.dos2unix.find.xargs.kill) 一.linux查看占用内存/cpu最高的进程情况(注明:可以使用一下命令查使用内存最多的10个进程) 1.查看占用cpu最高的进程 ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head 2.查看占用内存最高的进程 ps aux|head -1

linux常用命令技巧

原文地址 这篇文章来源于Quroa的一个问答<What are some time-saving tips that every Linux user should know?>-- Linux用户有哪些应该知道的提高效率的技巧.我觉得挺好的,总结得比较好,把其转过来,并加了一些自己的理解. 首先,我想告诉大家,在Unix/Linux下,最有效率技巧的不是操作图形界面,而是命令行操作,因为命令行意味着自动化.如果你看过<你可能不知道的Shell>以及<28个Unix/Linu

Linux常用命令小结(续)

20. mysql mysql --host=127.0.0.1 --port=3306 --database=test --user=test --password=test --default-character-set=utf8 21. 脚本求两个文件的相同集合 test1   test2 1           2 2           3 3           4 cat test1 test2 | sort | uniq -d (result: 2 3) cat test1 te

Linux常用命令速查备忘

Linux常用命令速查备忘 PS:备忘而已,详细的命令参数说明自己man 一. 启动,关机,登入,登出相关命令 [login] 登录 [logout] 登出 [exit] 登出 [shutdown] 停止系统 [halt] 停止系统 [reboot] 重启动 [poweroff] 切断电源 [sync] 把内存里的内容写入磁盘 [lilo] 安装lilo启动管理程序 [grub] 安装lilo启动管理程序 二. Shell相关命令 [chsh] 切换Shell [history] 显示命令履历