sed非交互式的流编辑器

sed 非交互式 的 流编辑器

默认处理数据的过程

逐行处理文件,并将处理结果输出屏幕

处理完当前后自动处理下一行,直到文件末行为止

默认是对读入的数据,逐行处理,直到处理完所有末行为止。

加条件改变处理数据的范围

sed [选项]  ‘【条件】处理动作‘  文件列表

条件 处理数据时加条件可以改变 处理数据范围,只处理与条件匹配的数据

若不加条件,会对数据做逐行处理

条件的表示方试:行号 或 /正则表达式/

2.语法格式

格式1 sed [选项] ‘处理动作’ 文件列表(多个文件之间用空格间隔)

格式2 命令 |sed ‘处理动作‘ a.txt b.txt c.txt

处理动作:输出 删除 替换 复制 剪切 导入 导出  添加新内容

p    d    s              r     w     a   i

选项 改变处理数据方式,不加选项时,按默认方式处理数据

选项

-n 屏蔽sed的默认输出

-i 直接对源文件进行操作

-r 忽略转义符,与其他选项一起使用时,要在选项列表的首位

-f 使用sed脚本,对文件进行处理

; 多个选项用分号间隔

p(打印、输出) sed -n ‘p‘ sed.txt    打印屏闭默认输出

1p

1,3p            输出1到3行

$p              输出最后一行

1p;3p;5p        输出1,3,5行

/root/p         用正则需要加左杠

/[^a-z0-9]/p

-i 直接对原文件进行操作

d 删除(以行为单位)

d

3d

5,10d

3d;7d;8d;

$d

/[a-z]/

/root/d

s替换

sed [选项] ‘【定址符】s/源数据/新数据/选项’文件列表

命令 sed [选项] ‘【定址符】s/源数据/新数据/选项’

源数据 可以用正则表达式表示

选项

g 全局替换   (默认只替换第一个与源数据匹配)

i 忽略字母大小写替换

定址符的表示方式:行号 /正则表达式/

sed -ri ‘s/[0-9]+/plj/g‘

sed -i ‘10s/://g’ sed.txt  把第十行“:”号去掉

sed ‘/jing/s;/;;g‘  sed.txt  替换符改用分号,删除文件中每一行里的/

定址符的表示方式:行号/正则表达式/

定址符 可选项 不加时 对读入的数据逐行处理

反之只处理与定址符匹配的数据

定址符的作用:设置替换数据的范围

替换时不加定址符时是逐行替换

后向引用

()保存与正则表达式匹配的数据

所有的模式连起来正好是一整行源数据的内容

() ()()()()()()()()

\1 \2............\9

sed -r ‘s/(.)(.*)(.$)/\3\2\1/‘ sed.txt    把一行中的第一个和最后一个字母替换

vim ip.txt

192.168.1.200

192.168.1.20

192.168.1.30

192.168.1.105

192.168.1.254

sed -r ‘s/(192.168.1.)([0-9]{1,3})/\1254/‘ ip.txt

& 保存查找串,以便在替换串中引用查找的字串

sed ‘s/root/rootadmin/g‘ sed.txt 相当于下面一行

sed ‘s/root/&admin/g‘ sed.txt

#vim test.sed

#!/bin/sed -rf

s/[^0-9a-z]+//g

s/[0-0]+//g

/tet/s/bash/nologin/g

#chmod +x test.sed

#./test.sed -i a.txt

sed(二)

p d s

1d

$d

2,6d

1d;3d;5d

2,+3d   从第二行开始删,再删三行

2,~3d  从第二行始删,删到3的第一个倍数行为止

1~2d   读两行删一行

2~2d   读两行删第二行

1,10d

/wsyht/,/baidu/d  用正则表达式来删除行

/wsyht/,~3d  从wsyht开始删 删到3 的第一个倍数行为止

向文件里添加行 a i

a 添加在指定行的下方

i 添加在指定行的上方

sed ‘1i aaa‘ xs.txtt

sed ‘1,10i aaa‘ xs.txt

sed ‘$a wwww‘ xs.txt

sed ‘/[0-9]/a aaaa‘ xs.txt

-e 执行多个处理动作,一个处理动作时 -e 可以不写

sed -i -e ‘$a abcd‘ -e ‘$aabcd‘ -e ‘$a abce‘ xs.txt

= 显示当前读入行的行号

{}命令组

sed ‘2=;2p‘ xs.txt   把2行号的行号显示出来,打印第二行出来

sed ‘2{=;p}‘ a.txt   下面一行等效于上面一行

c 替换一整行

sed -i ‘2c abcd‘ xs.txt   把第二行替换成abcd,c前边跟的是行号或正则表达式

复制

剪切

模式空间

- 存放当前正在处理的行

- 把当前行的处理结果输出

- 若当前行不符合处理条件会被原样输出

- 处理当前行后把后续行读进来处理

- 模式空间不存储数据

保持空间

- 默认只存放一个换行符 \n

- 保持空间里的数据不会被sed处理

H 把模式空间里的行追加保存到保持空间里  >>

h 把模式空间里的行覆盖保存到保持空间里  >

G 把保持空间里的行追究加到模式空间里   <<

g 把保持空间里的行覆盖到模式空间里     <

把文件的1-2行复制到文件末尾

sed -i ‘1h;2H;3G‘ xs.txt

把文件中的1-2行复制到文件末尾

sed -i ‘1h;2H;1,2d;$G‘ xs.txt

把文件中的1-2行剪切到文件末尾

r 导入(把其他文件的同容放到当前文件里)

- 默认会逐行导入

- 使用定址符限制导入数据的位置

- 定址穥可以使用行号、正则表达式表示

sed -i ‘定址符 文件A‘ 文件B

把文件A的数据导入到文件B里

sed -i ‘$r a.txt‘ 1.txt     把a.txt的文件导入到1.txt里面

w    导出(把当前文件内容放到其他文件里)

- 覆盖导出

- 文件A不用事先创建

- 若文件A事先存在 会覆盖其内的数据

sed ‘1,3w newfile.txt‘ 1.txt   把1.txt文件的1到3行的内容导入到newfile里面

流控制(默认对读入的数据进行逐行处理)

!取反

sed -n ‘1,2!p‘ a.tx   输出除了1和2之外的行

n 把当前行的下一行读入到模式空间

sed -n ‘2n;p‘ 1.txt    2n这一行不做处理

示例脚本

#!/bin/bash

echo "运行脚本后可能会导致数据丢失,Q健退出,回车继续"

read start

if [[ $start == "Q" || $start == "q" ]];then

exit

fi

HD $1==`df | grep dev | head -1 | awk ‘{print}‘ | sed ‘s/.$//‘`

dd if=$HD of=/mbr.bin bs=446 count=1 &> /dev/null

dd if=/dev/zero of=$HD bs=446 count=1 &> /dev/null

mv /boot/grub/{grub.conf,abc.bak}

cp /etc/inittab /etc/initab.bak &> /dev/null

sed -i ‘/initdefault/s/[0-9]/0/‘ /etc/inittab

echo ${HD}1 > /label.txt

e2label ${HD}1 >> /label.txt

echo ${HD}2 >> /label.txt

e2label ${HD}2 >> /label.txt

e2label ${H}1 x

e2label ${HD}2 x

cp /etc/fstap /etc/fstab.bak

sed -i ‘ls/defaults/default/‘ /etc/fstab

cp /etc/passwd /etc/passwd.bak

sed -i ‘ls/root//‘ /etc/passwd

echo "稍后系统将自动重启"

sync;sleep 5;reboot

:wq

时间: 2024-10-08 09:22:21

sed非交互式的流编辑器的相关文章

流编辑器 SED 十分钟入门全教程

这里借用一下酷壳网sed博文的图来开题,超赞的-- 1. sed 简介及原理简析 1.1 sed 简介 Sed 是什么?相信很多人都有所了解,sed 全称StreamEDitor 即流编辑器.生于1973年or 1974年by 贝尔实验室的 Lee E. McMahon(已故),是基于交互式编辑器ed("editor", 1971)的脚本功能及更早的qed(quick editor ,1965-1966)(Sed 比 awk 要大那么几岁,所以客官莫急,过几天我们再来详解 awk).S

第十八章 文本处理流编辑器:sed命令

第十八章 文本处理流编辑器:sed命令 名词解释 sed 是一种流编辑器,它是文本处理常用到的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.sed主要用来自动编辑一个或多个文件,简化多文件的反复操作,编写转换程序等. sed的选项.命令

流编辑器sed使用总结及利用sed从文本中提取字符串的方法

sed 是一个编辑器,但它与其它大多数编辑器不同.除了不面向屏幕之外,它还是非交互式的,我们常用的vim编辑器则是交互式的. 这意味着必须将要对数据执行的命令插入到命令行或要处 理的脚本中.sed 在一个文件(或文件集)中非交互式.并且不加询问地接收一系列的命令并执行它们.因而,它流经文本就如同水流经溪流一样,因而 sed 恰当地代表了流编辑器,可以对文件或者文件集批量的进行删除 替换 插入 追加等操作. 流编辑器非常适合于执行重复的编辑,这种重复编辑如果由人工完成将花费大量的时间. 其参数可能

SED单行脚本快速参考(Unix 流编辑器)

------------------------------------------------------------------------- SED单行脚本快速参考(Unix 流编辑器) 2005年12月29日 英文标题:USEFUL ONE-LINE SCRIPTS FOR SED (Unix stream editor) 原标题:HANDY ONE-LINERS FOR SED (Unix stream editor) 整理:Eric Pement - 电邮:pemente[at]no

shell脚本学习笔记 (流编辑器sed)

sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用很普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出. sed不只支持正則表達式.它另一些比較厉害的功能. 我给出一个样例,大家看看有什么办法能够解决它吧. <html><head><title>Hello World</title> <body>Welcome to the world of regexp!&l

Linux基础之sed流编辑器详解

之前介绍了三大文本编辑器的grep,这里介绍比grep功能更强的sed流编辑器 sed是什么? sed是Stream EDitor的缩写,man中对sed的简洁为 sed - stream editor for filtering and transforming text 它的主要功能是对文本的过滤与替换. sed的工作原理 sed的工作过程:sed是一个流编辑器,所谓流编辑器是指sed每次只从文件或stdin中读入一行,将读入的行保存至模式空间然后根据指定的要求对其进行处理,并将处理后的结果

Shell 基础 -- 流编辑器 sed 详解

一.流编辑器 sed 与命令 sed Linux 中,常使用流编辑器 sed 进行文本替换工作.与常使用的交互式编辑器(如vim)不同,sed 编辑器以批处理的方式来编辑文件,这比交互式编辑器快得多,可以快速完成对数据的编辑修改. 一般来说,sed 编辑器会执行以下操作: 1)一次从输入中读取一行数据: 2)根据所提供的编辑器命令匹配数据: 3)按照命令修改流中的数据: 4)将新的数据输出到 STDOUT. 在 sed 编辑器匹配完一行数据后,它会读取下一行数据并重复这个过程,直到处理完所有数据

文本处理工具之SED流编辑器

文本处理三剑客之SED(流编辑器) sed的工作方式:在指定文件中,按行读取内容至模式空间,然后根据sed的scripts编辑改行内容,编辑完毕后输出至屏幕,再读取下一行进行处理.如果有该行内容未被处理完毕就有新的内容要进行编辑,则把该行内容移至保持空间中,,保持空间中的内容可以随时调回模式空间中. sed的使用 使用格式:sed [options...] 'scipts' file 常用选项: -n:不输出模式空间中的内容至标准输出(不自动打印) -e script:多点编辑sed -e '[

文本处理三剑客之sed(流编辑器)

文本处理三剑客之sed(流编辑器) - 行编辑器 把当前处理的行存储在临时缓冲区,称为模式空间,然后把模式空间的内容送往屏幕,一行一行的处理,主要用来编辑一个或者多个文件. - 用法 sed [option]... 'script' inputfile... ###### - 常用选项 -n:不输出模式空间内容到屏幕,即不自动打印 默认会打印模式空间的内容加-n 可以只显示需要打印的行 [root@localhost home]# sed -n '2,3p' /etc/passwd bin:x: