Linux文本处理工具之sed

概念:

sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓存区中,称为"模式空间(pattern space)",接着用舍得命令处理缓冲区中的内容,处理完成后,把缓存区的内容输出。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你是用重定向存储输出。sed主要用来编辑一个活多个文件。

格式:

sed [-nefri] ‘command‘ 输入文本

常用选项:

-n:使用安静(silent)模式。在一般sed的用法中,所有来自STDIN的资料一般都会被列出到终端上。但如果加上-n参数之后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。

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

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

-r:sed的动作支援的是延伸正规表示的语法(预设是几次正规表示法的语法)

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

动作说明:

[n1[,n2]] 常用命令:不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

常用命令:

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

c:更改,c的后面可以接字符串,这些字符串可以取代n1,n2之间的行

d:删除,d的后面不接受任何东西

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

p:列印,讲某个选择的资料印出,通常会与参数-n一起出现

s:替换,可以直接进行替换的工作,sed ‘s/要替换的字符串/新的字符串/flags‘,这里修饰替换的标志flags有:

g:表示在行内进行全局替换,而没有g时通常只有第一次出现的时候被替换

n:1-512之间的一个数字,表示对本模式中指定模式第n次出现的情况进行替换

p:打印模式空间的内容

w:将模式空间的内容写入file中

举例:

1.删除某行

a.sed ‘2d‘ file                   #删除第二行

b.sed ‘$d‘ file                   #删除最后一行

c.sed ‘1,5d‘ file                   #删除第一行到第五行

d.sed ‘5,$d‘ file                 #删除第五行到最后一行

e.sed ‘/My/,/You/d‘ file          #删除包含"My"的行到包含"You"的行之间的行

f.sed ‘/My/,10d‘ file              #删除包含"My"的行到第十行的内容

g.sed ‘/^$/d‘ file                 #删除空行

2.显示某行

a.sed -n ‘2p‘ file       #显示第二行

b.sed -n ‘$p‘ file    #显示最后一行

c.sed -n ‘1,5p‘ file  #显示第一行到第五行

d.sed -n ‘5,$p‘ file  #显示第五行到最后一行

3.模式进行查询

a.sed -n ‘/sed/p‘ file    #查询包括关键字sed所在的所有行

b.sed -n ‘/\$/p‘  file    #查询包括关键字$所在所有行,使用"\"屏蔽特殊含义

4.增加一行或多行字符串

a.sed ‘1a test‘ file             #在第一行后新增字符串"test"

b.sed ‘1,3a test‘ file             #在第一行到第三行后新增字符串"test"

c.sed ‘1a test\ntest‘ file         #在第一行后新增多行,使用换行符\n

5.替代一行或者多行或者一行中的某部分

a.sed ‘1c test‘ file             #第一行的内容替换为test

b.sed ‘1,2c test‘ file             #第一行到第二行的内容替换为test

c.sed ‘1,5s/a/A/‘ file             #第一到第五中的首个a替换为A

d.sed ‘/B/s/a/A/g‘  file         #将有B的行中的a替换为A

6.插入

a.sed -i ‘$a test‘ file     #在最后一行直接输入test

7.多点编辑

a.sed -e ‘3,$d‘ -e ‘s/Test/test‘ file #先删除第三行到最后一行的数据,然后将"Test"替换为"test",$需要和正则表达式的$区分开,在此处表示行的结束

b.sed -e ‘3,$d; s/Test/test‘ file      #效果同上

8.脚本

a.讲以下命令保存在一个文本中(sed-script)

3i\

~~~~~~~~~~~~~~~~~~~~~

3,$s/\(hrwang\) is \(mjfan\)/\2 is \1/

$a\

We will love eachother forever!!

b. sed -f sed-script file

上边的脚本还可以进一步的优化

a.将以下命令保持在一个sh脚本中(sed-script)

#!/bin/sed -f

3i\

~~~~~~~~~~~~~~~~~~~~~

3,$s/\(hrwang\) is \(mjfan\)/\2 is \1/

$a\

We will love eachother forever

b../sed-script file

注意:

1.sed -i 这个动作会直接修改到原始的文件,慎用。

2.sed -e 这个动作表示多点编辑

3.sed脚本就是写在文件中的一系列sed命令。脚本中,要求命令的末尾不能有任何多余的空格或文本。如果在一行中有多个命令,要用分号分隔。执行脚本时,sed先将输入文件中第一行复制到模式缓冲区,然后对其执行脚本中所有的命令。每一行处理完毕后,sed再复制文件中下一行到模式缓冲区,对其执行脚本中所有命令。使用sed脚本时,不再用引号来确保sed命令不被shell解释。

4.sed命令可以指定零个、一个或两个地址。每个地址都是一个描述模式、行号或者行寻址符号的正则表达式。如果没有指定地址,那么命令将应用于每一行;如果只有一个地址,那么命令应用于与这个地址匹配的任意行;如果指定了有逗号分隔的两个地址,那么命令应用于匹配第一个地址的第一行和它后面的行,直到匹配第二个地址的行(包括此行),可以把第一个地址看做是启用动作,并把第二个地址看做是禁用动作;如果地址后面跟有感叹号(!),那么命令就应用于不匹配该地址的所有行。

行定位的使用

5.sed命令中c和s的区别(c直接更改,s替换)

时间: 2024-10-11 01:09:36

Linux文本处理工具之sed的相关文章

linux文本处理工具

linux文本处理工具 1.Linux 文件系统上的特殊权限: SUID     SGID   Sticky 进程的安全上下文:(1)任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行去权限 (2)启动为进程后,其属主为发起者,属组为发起者所属的组 (3)进程访文件的权限,取决于进程的发起者 (a)  进程的发起者,同文件的属主:则应用文件属主权限                                            (b)  进程的发起者,属于文件属组:则

Linux文本处理工具AWK使用解析

在linux系统上有三大文本处理工具分别是:grep,sed,awk,这次主要来看看awk. awk  option  'pattern'  file -F    指定分隔符: -v     申明自定义变量: 查看当前系统上,用户名和用户shell,输出分隔符为~. # awk -F: 'BEGIN{OFS="~";print "UserName   Shell"}{print $1,$7}END{print "================end===

Linux文本处理“三剑客”之sed

sed(Stream Editor)是一个行编辑工具.下面我们介绍 sed 的实现原理和基本使用方法. 一.sed 的处理文本的流程 基本处理流程如下: 处理流程是:每次读入文本文件的一行到内存中的模式空间中,在模式空间中处理后将处理的结果输出,默认会打印到屏幕上.因此,默认情况下,不会改变原文件的内容. 二.sed 命令的使用 基本语法:sed [options]... '地址定位 编辑命令' FILE... 地址定位的方法: 1.行定位: start_line[,end_line] 2.模式

Linux文本处理工具之join,paste

大纲 1.join是什么?有什么作用? 2.join语法格式 3.实战演练 4.引入paste命令 1.join是什么?有什么作用? Linux下最常用的数据文件格式是文本格式的,使用分隔符来区分不同的字段,比如冒号(:).制表符.空格等.像常见的/etc/passwd和 /etc/group两个文件就是用":"来分隔的.这种文本格式我们可以视为文本数据库,既方便人去阅读,也适合程序处理,通常某列类似于数据库中的关键字. join命令就是一个根据关键字合并数据文件的命令(join li

Linux 文本处理工具

Linux 文本处理工具 wc 打印行.词.字节的数量 cut 按列切分文本  sort 排序 uniq 消除重复行 wc 打印行.词.字节的数量 语法: wc [OPTION]... [FILE]... 选项: -l:line 统计行数 -w:words 统计单词数 -c:characters 统计字符数 示例: [[email protected] ~]$ cat wctest hello world 123 [[email protected] ~]$ wc -l wctest    #统

Linux文本处理工具——Grep

Grep简介 全名:Global search Regular expression and Print out the line. 功能:文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行. Linux的三大文本处理工具之一,可以说学好grep命令无疑是重要的,可以说学好grep也是不容易的,因为grep里面要用到最烦人的正则表达式. grep语法格式 grep [option]... 'PATTERN' FILE... [option]:表示可以跟选项,

Linux系统上的文本处理工具之sed

sed命令 sed是一种在线编辑器.行编辑器,一次处理一行内容,在处理时,把当前处理的行存储在临时缓冲区当中,该缓冲区称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完毕后,把缓冲区的内容送到标准输出:然后紧接着去处理下一行,重复完成相同的操作,直至文件结尾:sed处理的整个过程中,对象文件中的内容并没有改变,除非使用重定向来存储处理后的结果.sed主要用来自动编辑一个或多个文件,简化对文件的反复操作过程. sed跟我们之前讲过的文本处理工具vi

Linux文本处理工具三剑客之grep

Linux家族关于文本处理的工具有三个,他们分别为grep.awk和sed,今天我就介绍一下grep文本处理工具. 首先,什么是grep呢? grep是一种文本搜索工具,基于"pattern"对给定文本进行搜索过滤,并对目标文本进行检查,并打印出符合条件的文本的一款文本处理工具.说到pattern,那么pattern又是什么呢?那就是大家所熟知的"正则表达式". grep家族又有三个成员:grep,egrep和fgrep. grep: 支持正则表达式. egrep:

漫漫运维路——Linux文本处理三剑客之sed

Sed,即Stream EDitor的缩写,是Linux操作系统中常见的文本处理工具,可以结合正则表达式简单方便地对文本进行处理.本文将以实例的方式介绍sed的基本用法. 基本使用方法 基本语法:sed [OPTION] [AddressCommand] FILE1 FILE2...... OPTION{常用} -n:静默模式,不显示模式空间 -i:直接修改源文件 -e SCRIPT -e SCRIPT:可以同时执行多个脚本 -f /APATH/TO/SED_FILE:从文件中读取脚本,执行 -