Linux sed命令是利用script来处理文本文件。sed可依照script的指令,来处理、编辑文本文件。主要用来自动编辑一个或多个文件;简化对文件的反复操作,编写转换程序等
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
- -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
- -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
- -h或--help 显示帮助。
- -n或--quiet或--silent 仅显示script处理后的结果。
- -V或--version 显示版本信息。
动作说明:
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~该命令不加反斜杠也可以,即a或a\或a \都可以
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行c \ !
- d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行) i \;
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
Sed 的正则表达式:
- \(..\) 保存已匹配的字符 后面使用\1 \2引用
- & 保存查找串以便在替换串中引用 s/love/**&**/
Sed 定位 'COMMAND' 命令格式 '位置 动作'
- Sed 支持一下几种地址类型:
- 1.first~step 这两个单词的意思: first 指起始匹配行, step 指步长,例如: sed -n 2~5p 含义:从第二行开始匹配,隔 5 行匹配一次,即 2,7,12.......。
- 2. $ 这个$符表示匹配最后一行。例如 sed -n '$p' 打印文件最后一行
- 3 . /REGEXP/ 这个是表示匹配正则那一行,通过//之间的正则来匹配。
- 4. \cREGEXPc 这个是表示匹配正则那一行,通过\c 和 c 之间的正则来匹配,c可以是任一字符 示例:sed -n '\a4444ap' ttt.txt a是定界符
- 5. addr1,addr2 定址 addr1, addr2 决定用于对哪些行进行编辑。地址的形式可以是数字、正则表达式或二者的结合。如果没有指定地址, sed 将处理输入文件中的所有行。如果定址是一个数字,则这个数字代表行号,如果是逗号分隔的两个行号,那么需要处理的定址就是两行之间的范围(包括两行在内)。范围可以是数字,正则或二者组合。 示例:sed -n '3,7p' 打印3-7行,示例2: sed -n '3,/jjjj/p' 打印3到匹配jjj的行 示例3:sed -n '/44444/,/jjjj/p' 打开匹配444到jjj的行
- 6.addr1, +N 匹配地址 addr1 和后面的N行 示例:sed -n '3,+2p' 打印3+2行,等于3-5行
- 7.addr1,~N 匹配addr1 到后面N的倍数行 示例:sed -n '5,~4p' 从5行开始,匹配到4的倍数行(第8行)
常见用法示例:
增加行
sed '1a hello world' test.txt #其中a命令表示在指定行的后面附加一行,1a则是在第一行的后面添加一行
sed '1i hello world' test.txt #命令i表示在指定的行的前面插入一行,插入的内容为其后面的字符串
替换行
sed 's/west/north/g' ceshi.txt 说明:s 命令用于替换。命令末端的 g 表示在行内全局替换;也就是说如果每一行里出现多个west,所有的 west 都会被替换为 north。如果没有 g 命令,则只将每一行的第一 west 替换为 north。
sed 's/[0-9][0-9]$/&.5/' ceshi.txt 说明:当“与”符号( &)用在替换串中时,它代表在查找串中匹配到的内容时。这个示例中所有以 2 位数结尾的行后面都被加上.5。
sed 's/\(Mar\)got/\1linanne/p' ceshi.txt 说明:包含在圆括号里的模式 Mar 作为标签 1 保存在特定的寄存器中。替换串可以通过\1 来引用它。则 Margot 被替换为 Marlinane。
sed '/^2/c hello world' test.txt 说明: 以2开头的行都会被替换成hello world
sed -n 's/Hemenway/Jones/gp' ceshi.txt 说明:
说明:命令末端的 g 表示在行内全局替换 i 替换时不区分大小写
删除行
sed '1d' ab #删除第一行
sed '$d' ab #删除最后一行
sed '1,2d' ab #删除第一行到第二行
sed '2,$d' ab #删除第二行到最后一行
sed '/north/d' ceshi.txt #所有包含模式 north 的行都被动删除
搜索并输出行内容
sed -n '/north/p' ceshi.txt #打印匹配north的行
sed -n '/west/,/east/p' ceshi.txt #打印匹配west和east之间的行
sed -n '5,/northeast/p' ceshi.txt 打印5到匹配的行