linux-shell脚本命令:sed命令简介

[ sed简介: ]

sed是一个很好的文件处理工具, 它本身是一个管道命令, 以行为单位进行处理, 可以用于对数据行进行新增、选取、替换、删除等操作。

sed命令行格式:sed [-nefri] 'range command' file

如: sed '2d' aaa.txt # 删除文件aaa.txt中第二行

[ sed工作流程: ]

使用vim这种屏幕编辑器编辑一个文件的时候, 我们需要把这个文件打开, 这里存在两个问题:

1. 打开一个比较大的文件会消耗很多内存。

2. 我们无法写脚本调用vim来编辑文件, 但是sed可以通过写脚本编辑文件。

sed属于流编辑器, 它在编辑文件的时候, 首先会把文件的一行内容读入内存,读入内存的部分, 称为模式空间; 然后根据我们的需要进行编辑,

编辑完后会把模式空间的内容输出到屏幕, 并把它里面的内容清空, 再读取下一行到模式空间, 这样的话就避免了一次性读取整个文件。

[ sed常用选项: ]

-n: 只会显示模式空间里的内容, 而不会显示没有编辑过的内容。

-e: 直接在指令列模式上进行 sed 的动作编辑;

-f: 直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

-r: sed 的动作支援的是延伸型正规表示法的语法。( 预设是基础正规表示法语法 )

-i: 直接修改读取的档案内容, 而不是由屏幕输出。

[ sed常用命令: ]

d: 删除, 因为是删除, 所以 d 后面通常不接任何东西;

s: 替代, 可以直接进行替换的工作, 通常这个 s 的动作可以搭配正规表示法;

a: 追加, a 的后面可以接字符串, 而这些字符串会在新的一行出现(目前的下一行);

i: 插入, i 的后面可以接字符串, 而这些字符串会在新的一行出现(目前的上一行);

c: 取代, c 的后面可以接字符串, 这些字符串可以取代一行内容;

[ 常用命令举例: ]

## 删除操作 d : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

range是范围, 删除操作有两种方法表示:

① 直接写一个数字, 表示对多少行进行操作. sed '2d' aaa.txt #表示删除文件aaa.txt中第二行

② 使用正则表达式, 此时必须要使用两个反斜杠 // 隔开. sed '/^Tom/d' aaa.txt # 表示删除aaa.txt中以Tom开头的行

* 如果没有指定范围, 则会对全文进行操纵. sed 'd' aaa.txt # 表示删除aaa.txt中所有的行

1. sed '$d' aaa.txt # 删除aaa.txt中最后一行 (对单行进行操作)

2. sed '7,9d' aaa.txt # 删除文件aaa.txt中第七行到第九行 (对多行进行操作)

3. sed '/aaa/,/bbb/d' aaa.txt # 删除文件aaa.txt中含有aaa至含有bbb之间所有的行 (对多行进行操作)

返回栏目页:http://www.bianceng.cnhttp://www.bianceng.cn/OS/Linux/

## 替代操作 s : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

替换格式: sed 'range s/orig/new/sign' file # 如果没有指定范围的话, 将会对全文进行操作.

1. sed 's/aaa/bbb/' ccc.txt # 将ccc.txt全文中每行的第一个关键字 aaa 替换成 bbb, 因为我们没有指定任何模式

2. sed 's/aaa/bbb/g' ccc.txt # 将ccc.txt全文中所有 aaa 替换成 bbb, 因为我们加了sign: g

3. sed 's/aaa/bbb/2' ccc.txt # 将ccc.txt全文中每行第二个 aaa 替换成 bbb, 因为我们加了sign: 2

4. sed '1s/aaa/bbb/g' ccc.txt # 将ccc.txt全文中第一行所有 aaa 替换成 bbb, 因为我们加了range: 1, 加了sign: g

5. 上面示例也可以用其他字符隔开(只有替换有): sed 's#aaa#bbb#' ccc.txt

6. old位置支持正则, 但在new位置不支持正则, 除了字符 \n \&

sed '1s/a/N&N/2' ccc.txt # 将ccc.txt全文中第一行第二个 a 替换成NaN, & 相当于对前面 a 的引用

7. 对特定的范围做多个操作, 那么我们要把多个操作用 { } 括起来, 用 ; 隔开多个命令.

sed '1{s/a/b/g; s/b/c/}' ccc.txt # 先将ccc.txt全文中第一行所有 a 替换成 b, 再将第一行第一个关键字 b 替换成 c

8. 上面所讲都是替换一个单词, 如果我们想替换某个字符, 那么可以使用 y 命令

sed '1y/abc/xyz/' ccc.txt # 将ccc.txt中全文第一行所有 a 替换成 x, b 替换成 y, c 替换成 z

## 追加操作 a : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1. sed '/ab/a\xxx' ccc.txt # 将ccc.txt中含有 ab 的行下面再插入一行字符串xxx

2. sed '1a zhang\njim' ccc.txt # 在ccc.txt中第一行下面插入zhang再在下一行插入jim, \n 起换行作用

## 插入操作 i : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1. sed '/ab/i\xxx' ccc.txt # 将ccc.txt中含有 ab 的行上面再插入一行字符串xxx

2. sed '$a abc' ccc.txt # 在ccc.txt中最后一行插入abc

## 取代操作 c : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1. sed '/ab/cAB=AB' ccc.txt # 将ccc.txt中含有 ab 的行整行替换成AB=AB

2. sed '1c ab' ccc.txt # 将ccc.txt中第一行整行替换成ab

## 显示模式空间 p : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1. sed '$a abc p' ccc.txt # 将模式空间和文件中的内容都显示在屏幕上

[ sed其他命令: ]

1. = 为显示行号

sed '/^abc/{=}' ccc.txt # 以abc开头的关键词所在的行号

2. n 为获取下一行 (当前行从模式空间删除, 下一行读入模式空间)

sed '/^a/ {n;s/b/B/g}' ccc.txt # 匹配以a开头的下一行整行, 使用 B 替换 b.

3. N 为读取多行内容到模式空间: (当前行和下一行都在模式空间中)

sed '/^A/{s/tb/TB/; N; s/t\nb/TB \n/}' ccc.txt # 匹配以 A 开头的行, 将tb替换成TB; 再读取下一行, 将当前行的t和下一行的b替换成TB

4. 使用多行模式空间的话, ^ 就不是行的开头, 而是模式空间的开头; $ 就不是行的结尾, 而是模式空间的结束.

替换前:a b c d e 替换后:A b c d e

a b c d e a b c d e

sed 'N; s/^a/A/' ddd.txt # 第一行和第二行都会被读入模式空间, 但只有第一行的 a 会被替换成 A, 第二行的 a 并不会被替换.

替换前:a b c d e 替换后: a b c d e

a b c d e a b c d E

sed 'N; s/e$/E/' ddd.txt # 第一行和第二行都会被读入模式空间, 但只有第二行的 e 会被替换成 E, 第一行的 e 并不会被替换.

5. 除了模式空间, 还有保持空间, 我们可以把它理解成一个缓存. 保持空间的内容和模式空间的内容可以互换

h : 把模式空间内容存储到保持空间; G : 把保持空间里面的内容存储到模式空间;

替换前:a 替换后:b

b a

aa bb

bb aa

sed '/a/{h; d}; /b/{G}' eee.txt # 匹配含有 a 的那一行,把它们保存在保持空间并从模式空间删除;匹配含有b的那一行,把保持空间内容放到模式空间;

6. set里面没有循环, 如果想实现循环的效果, 可以借助标签

作者:csdn博客 zdp072

时间: 2024-08-31 06:25:59

linux-shell脚本命令:sed命令简介的相关文章

linux shell脚本学习xargs命令使用详解_linux shell

xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据.xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代. xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,下面是一些如何有效使用xargs 的实用例子. 1.

Linux Shell脚本系列教程(二):终端打印命令详解

  这篇文章主要介绍了Linux Shell脚本系列教程(二):终端打印命令详解,本文着重讲解了echo终端打印.printf终端打印两个打印出输出命令,需要的朋友可以参考下 终端打印 终端是交互式工具,用户可以通过它与shell环境进行交互.在终端中打印文本是大多数shell脚本和工具日常需要执行的基本任务.通过终端打印,人们可以知道系统的运行状态,这对用户来说是至关重要的. echo终端打印 代码如下: echo "Welcome to Bash" echo 'Welcome to

面向 DBA 的 Linux Shell 脚本简介

http://www.itpub.net/showthread.php?s=&threadid=720028 面向 DBA 的 Linux Shell 脚本简介 7 年前,Oracle 发布了 Linux 上的第一个商业数据库.从那时起,Oracle.Red Hat 和 Novell/SUSE 就不断地合作更改 Linux 内核,从而提高数据库和应用程序的性能.正因为这样,用于 Linux 的 Oracle 数据库 10g 才包含了与操作系统紧密相关的许多增强功能.DBA 比以往任何时候更需要了

shell脚本里的命令加参数 参数 是从另一个文件中取得 怎么设置

问题描述 shell脚本里的命令加参数 参数 是从另一个文件中取得 怎么设置 test.sh如下 #!/bin/bash usr/local/bin/ipmitest -I lanplus -H 10.18.32.80 -U root -P password -e sol active arg_conf 如下 10.18.32.90 root password 10.18.32.100 admin admin 10.18.32.110 test password 脚本里的命令的 ip user

Shell基础之-sed命令

Shell基础之-sed命令 首先,大家如果看到有什么不懂的地方,欢迎吐槽!!! 我会在当天或者第二天及时回复,并且改进~~ sed 是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑 sed只是对缓冲区中原始文件的副本进行编辑,并不编辑原始的文件 sed命令调用的三种方式 1.在shell命令行输出命令调用sed sed [option] 'sed cmd' file 2.将sed命令插入脚本 sed [option] -f 'sed.sh' file vi sed.sh sed要调用

Linux shell脚本基础学习详细介绍(完整版)

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可

Linux Shell脚本系列教程(一):Shell入门

  这篇文章主要介绍了Linux Shell脚本系列教程(一):Shell入门,本文讲解了Shell简介.Shell基本操作.如何打开Shell终端.Shell脚本的概念.如何运行Shell脚本.Shell脚本的注释等基础知识,需要的朋友可以参考下 一.Shell简介 诸多类Unix操作系统的设计令人惊叹.即便是在数十年后的今天,Unix式的操作系统架构仍是有史以来最佳的设计之一.这种架构最重要的一个特性就是命令行界面或者shell.shell环境使得用户能与操作系统的核心功能进行交互.术语脚本

Linux Shell脚本系列教程(四):使用函数添加环境变量

  这篇文章主要介绍了Linux Shell脚本系列教程(四):使用函数添加环境变量,本文对环境变量的一知识作了介绍,并给出普通添加环境变量和使用函数添加环境变量的方法,需要的朋友可以参考下 一.简介 环境变量通常用于存储路径列表,这些路径用于搜索可执行文件.库文件等.例如:$PATH.$LD_LIBRARY_PATH,它们通常看起来像这样: 代码如下: PATH=/usr/bin;bin LD_LIBRARY_PATH=/usr/lib;lib 这意味着只要shell需要运行二进制可执行文件时

Linux shell脚本基础学习详细介绍(完整版)第1/2页_linux shell

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.当编辑好脚本时,如果要执行该脚本,还必须使其可执行.要使脚本可执行:编译

Linux Shell脚本的10个有用的“面试问题和解答”

Linux Shell脚本的10个有用的"面试问题和解答"首先致上每日问候.Linux的浩瀚无垠,使人总能每次都提交与众不同的内容.我们"The-Tecmint-Team"的工作是给我们的读者提供一些独特的内容,这些内容不仅对他们的职业生涯很有用,同时也让他们增长知识.在此,我们就尝试这么去做,至于能取得多大的成功,就由我们的读者朋友们来判断吧. Questions on Shell Scripting 我们为各类用户提供了关于Shell脚本语言和面试问题的很多教程