shell脚本编程-sed编辑器(1)

1、sed编辑器使用

sed编辑器被称作流编辑器,基于预先提供一组规则来编辑数据流。

格式:sed option script file

(1)选项option

-e script  在处理输入时,将script中指定的命令添加到运行的命令中,可以同时处理多个命令;

-f file 在处理输入时,将file中指定的命令添加到运行的命令中;

-n 不为每个命令生成输出,等待print命令来输出

(2)sed基本使用

在命令行使用sed编辑器,例如替换命令

    $  echo "this is a test " | sed ‘s/test/big test/‘
    this is a big test

使用s标识替换命令,‘s/src/dst/‘,将命令行回显的数据中的src替换为dst。

编辑文件中的数据,需要指定需要处理的文件

    $ cat test
    There are two dogs
    $ sed ‘s/dogs/cats/‘ test
    There are two cats

需要说明的是,sed不会修改文件中的数据,只是将数据编辑后输出到STDOUT上。

需要指定多个处理命令时,需要使用-e选项。

    $ sed ‘s/dogs/cats/; s/two/three/‘ test
    There are two cats

命令之间需要分号隔开,并且命令末尾和分号之间不能有空格。

从文本中读取处理命令,使用-f选项指定命令文件

    $ cat script
    s/dogs/cats/
    s/two/three/
    $ sed -f script test

2、替换命令

(1)格式:s/src/dst/flags

(2)替换标记

数字:表明文本中每行的第几个匹配需要被替换

g:表明文本中每行出现的所有的匹配数据都会被替换

p:表明修改行的内容需要被打印出来

w fil:将替换的结果写到文件中

默认情况下,替换命令只会修改每行文本中第一处匹配到的数据;使用数字标记,可以指定文本中每行的第几个匹配需要被替换;使用g标记,可以指定文本中每行的所有匹配需要被替换。

    $ cat test
    There are two cats and two dogs
    There are two cats and two dogs
    $ sed ‘s/two/three/‘ test
    There are three cats and two dogs
    There are three cats and two dogs
    $ sed ‘s/two/three/2‘ test
    There are two cats and three dogs
    There are two cats and three dogs
    $ sed ‘s/two/three/g‘ test
    There are three cats and three dogs
    There are three cats and three dogs

默认情况下sed处理的数据将会被输出到STDOUT上,使用-n选项可以指定不输出处理后的数据;可以使用-n选项和增加p标记一起使用,只输出需要处理的数据。

(3)处理字符

在处理的字符中带有/时,替换会出现异常,需要使用\来转义,例如:

    $ sed ‘s/\/bin\/bash/\/bin\/csh/‘ /etc/passwd

sed命令也允许使用其它分隔符,例如叹号

    $ sed ‘s!/bin/bash!/bin/csh!‘ /etc/passwd

在这个例子中,路径名更容易读取和理解。

在shell脚本中,通常会用到需要替换的字符保存在一个变量中,直接替换的话会出现错误,需要使用单引号包含双引号的方式指定需要替换的变量;

    $ cat test.sh
    var=cats
    sed ‘s/dogs/‘"$var"‘/‘ test

(4)指定过滤选项

默认情况下,sed命令作用于文本数据的所有行,可以通过指定过滤选项进行行寻址。

有两种方式的行寻址:行的数字范围和文本模式过滤

数字的寻址方式,可以使用单个数字指定要处理的行号;可以使用起始行号、逗号、结束行号指定要处理的行范围;可以使用起始行号、逗号、$指定从某行开始到最后一行。

    $ cat test
    There are two dogs
    There are two dogs
    There are two dogs
    There are two dogs
    $ sed ‘2s/dogs/cats/‘ test
    There are two dogs
    There are two cats
    There are two dogs
    There are two dogs
    $ sed ‘2,3s/dogs/cats/‘ test
    There are two dogs
    There are two cats
    There are two cats
    There are two dogs
    $ sed ‘2,$s/dogs/cats/‘ test
    There are two dogs
    There are two cats
    There are two cats
    There are two cats

文本过滤的寻址方式,使用/string/指定匹配字符的行进行处理。

$ cat test
There are two dogs
There are two cats
There are two birds
$ sed -n ‘/cats/s/two/three/p‘ test
There are three cats

可以使用正则表达式创建高级文本模式进行过滤。

使用组合命令,可以将寻址应用于所有的命令,例如:

$ sed -e ‘2,${s/dogs/cats/; s/two/three/}‘ test

只需将要处理的所有命令使用{}来组合到一起即可。

3、删除、插入、修改、转换命令

(1)删除命令

格式:sed ‘d‘ input_file

当不指定匹配选项时,d命令会将所有行都删除;

通常在使用删除命令时,需要指定行寻址,指定行号或字符匹配两种方式都适用;

可以指定行号,例如:sed ‘3d‘ input_file;

或者指定行范围,例如:sed ‘2,3d‘ input_file 或 sed ‘3,$d‘ input_file;

文本匹配模式与替换命令用法一致,例如:sed ‘/keyword/d‘ input_file;

$ cat test
the line num is 1
the line num is 2
the line num is 3
$ sed ‘2,$d‘ test
the line num is 1
$ sed ‘/2/$d‘ test
the line num is 1
the line num is 3

同样需要说明的是,d命令不会修改原文件内容,只是修改了输出。

(2)插入和附加文本

格式:sed ‘i\string line‘ test —— 向指定行前一行插入文本

sed ‘a\string line‘ test —— 向指定行后一行附加文本

$ cat test
the line num is 1
the line num is 2
the line num is 3
$ sed ‘2i\this is a test line‘ test
the line num is 1
this is a test line
the line num is 2
the line num is 3
$ sed ‘2a\this is a test line‘ test
the line num is 1
the line num is 2
this is a test line
the line num is 3

(3)修改行

格式:sed ‘c\string text‘ input_file

修改命令和插入、附加格式基本一致,执行后会替换指定行内容

修改命令可以使用匹配模式。

(4)转换命令

格式:sed ‘[address]y/inchars/outchars/‘ input_file

转换命令y是唯一可以处理单个字符的sed编辑命令

$ cat test
the line num is 1
the line num is 2
the line num is 3
$ sed ‘y/12/45‘ test
the line num is 4
the line num is 5
the line num is 3

要求inchars和outchars长度要相同,否则会报错。

转换命令会替换文本中所有出现的字符。

时间: 2024-10-11 10:54:17

shell脚本编程-sed编辑器(1)的相关文章

shell脚本编程之正则表达式(二)(扩展正则表达式、sed)

shell脚本编程之正则表达式(二) 一.前言 ? 本文主要是对扩展正则表达式的介绍,同时,继续按照上篇文章的风格介绍sed文本处理工具,sed作为shell编程中"三剑客"之一,在对文本处理上有巨大作用.关于正则概念以及grep命令结合正则使用的案例请参照:https://blog.51cto.com/14557673/2455588 二.扩展正则表达式 ? 扩展正则表达式主要是为了简化指令而产出的.例如,使用基础正则表达式查询文件中空白行与行首为#号之外的行(一般用于查看生效的配置

Shell脚本编程30分钟入门

什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch test_$i.txt done 示例解释 第1行:指定脚本解释器,这里是用/bin/sh做解释器的 第2行:切换到当前用户的home目录 第3行:创建一个目录shell_tut 第4行:切换到shell_tut目录 第5行:循环条件,一共循环10次 第6行:创建一个test_1…10.txt文件 第7

Linux Shell脚本编程学习笔记和实战

http://www.1987.name/141.html shell基础 终端打印.算术运算.常用变量 Linux下搜索指定目录下特定字符串并高亮显示匹配关键词 从键盘或文件中获取标准输入 [read命令] 文件的描述符和重定向 数组.关联数组和别名使用 函数的定义.执行.传参和递归函数 条件测试操作与流程控制语句 获取时间日期格式和延时 [date.sleep命令] 内部字段分隔符IFS和脚本的调试DEBUG 显示.读取或拼接文件内容 [cat命令] 文件查找与打印文件列表 [find命令]

《Linux命令行与shell脚本编程大全》学习笔记(转)

第一部分:Linux命令行<Linux命令行与shell脚本编程大全> 第一章:初识Linux shell<Linux命令行与shell脚本编程大全> 第二章:走进shell<Linux命令行与shell脚本编程大全> 第三章:基本的bash shell命令<Linux命令行与shell脚本编程大全> 第四章:更多的bash shell命令<Linux命令行与shell脚本编程大全> 第五章:使用Linux环境变量<Linux命令行与she

shell脚本编程30分钟入门上手

什么是Shell脚本 Shell脚本(英语:Shell script),又称Shell命令稿.程序化脚本,是一种电脑程序与文本文件,内容由一连串的shell命令组成,经由Unix Shell直译其内容后运作.被当成是一种脚本语言来设计,其运作方式与直译语言相当,由Unix shell扮演命令行解释器的角色,在读取shell脚本之后,依序运行其中的shell命令,之后输出结果.利用shell脚本可以进行系统管理,文件操作等. 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell

#7 shell脚本编程之正则表达式

多命令执行方法: 脚本组成: 1.shengbang 2.# 3.空白行--没有任何内容的行.只包含空白字符或制表符(TAB) 4.逻辑判断 shell脚本编程: 1.加执行权限,通过路径来调用脚本: 2.利用解释器直接执行: 本文处理工具: vim.vi.nano 文本处理三剑客: grep系: grep.egrep.fgrep,文本搜索工具,基础"pattern"对于给定的文本进行模糊搜索,grep系默认工作于贪婪模式下: sed:stream editor,流数据器,行编辑器,文

《Linux命令行与Shell脚本编程大全第2版.布卢姆》pdf

下载地址:网盘下载 内容简介  · · · · · · 本书是一本关于Linux 命令行与shell 脚本编程的全面教程.全书分为四部分:第一部分介绍Linuxshell 命令行:第二部分介绍shell 脚本编程基础:第三部分深入探讨shell 脚本编程的高级内容:第四部分介绍如何在现实环境中使用shell 脚本.本书不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料. 本书内容全面,语言简练,示例丰富,适合于linux 系统管理员及Linux 爱好者阅读

SHELL脚本编程的常识和VI常用技巧

来源:http://mprc.pku.edu.cn/mentors/training/TrainingCourses/material/ShellProgramming.HTM#_Toc37518085 Shell脚本编程的常识... 3 七种文件类型... 3 正则表达式... 3 字符类描述... 4 shell的引号类型... 4 变量设置时的不同模式:... 4 条件测试... 5 命令执行顺序... 6 脚本调试... 6 一些常用的小trick.. 6 打印一些头信息... 6 创建

关于shell脚本编程第一篇

shell脚本编程(1)脚本的基本格式:              程序:指令+数据程序编程风格分为两种:                    过程式:以指令为中心,数据服务于指令                    对象式:以数据为中心,指令服务于数据过程式编程有以下几个特点:                        顺序执行                        循环执行                        选择执行shell编程:          过程式.解释