欢迎光临
我们一直在努力

sed 命令

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到匹配的行

赞(0) 打赏
未经允许不得转载:jobman » sed 命令
分享到: 更多 (0)

联系我们