linux sed 应用实例,Linux sed 流编辑器的一些应用实例

1. 首先注意sed的作用是什么?本质是什么?本质就是自动的编辑器!也就是在脚本代码

中进行控制的!使编辑文件的过程自动化,以便用“批处理”方式编辑文件

2.    sed是基于行的,因此按顺序对每一行执行命令。

3.    参数

sed: invalidoption -- h

用法: sed[选项]... {脚本(如果没有其他脚本)} [输入文件]...

-n, --quiet,--silent

取消自动打印模式空间

也就是所有的显示都是由自己控制的!!!

-e 脚本,--expression=脚本

添加“脚本”到程序的运行列表

-f 脚本文件,--file=脚本文件

添加“脚本文件”到程序的运行列表

-i[扩展名],--in-place[=扩展名]

直接修改文件(如果指定扩展名就备份文件)

-l N,--line-length=N

指定“l”命令的换行期望长度

--posix

关闭所有 GNU 扩展

-r,--regexp-extended

在脚本中使用扩展正则表达式

-s,--separate

将输入文件视为各个独立的文件而不是一个长的连续输入

-u,--unbuffered

从输入文件读取最少的数据,更频繁的刷新输出

--help    打印帮助并退出

--version  输出版本信息并退出

如果没有 -e,--expression, -f 或 --file 选项,那么第一个非选项参数被视为

sed脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准

输入读取数据。

4.    sed -e'1,10d' ping.sh >1

# 将ping.sh中逐行读取到缓冲区,删除ping.sh文件中1-10行,然后重定向到1文件中

5.    sed -e'/^#/d' ping.sh > 1

#将ping.sh中逐行读取到缓冲区,删除ping.sh文件中第一个字符是#的行,然后重定向到

1文件中

6.    sed -e'/"/d' ping.sh > 1

# 删除有 "的行,并输出到1文件

7.   字符        描述

^       与行首匹配

$       与行末尾匹配

\w     与任一个字符匹配

*        将与 前一个字符的零或多个出现匹配

[]       与 [ ] 之内的所有字符匹配

8.   下面是几个示例:

规则表达式        描述

/./             将与包含至少一个字符的任何行匹配

---> 也就是说只要有一个字符的行都会输出

/../            将与包含至少两个字符的任何行匹配

---> 也就是说只要有两个字符在一起及以上的都会删除

/^#/           将与以 '#'开始的任何行匹配

---> 匹配开头( ^ ) 以#的行删除

/^$/          将与所有空行匹配

---> 也就是开头结尾没有东西,所以就是空行删除

---> sed -e '/^$/d' ping.sh | wc -l >1 将非空行的函数输入到文件1( 删除空行,剩下

的结果输出到文件 )

/}$/           将与以'}'(无空格)结束的任何行匹配

---> sed -e '/}$/d' ping.sh >1          以 }结束的行

/}*^/           将与以 '}' 后面跟有零或多个空格结束的任何行匹配

/[abc]/          将与包含小写'a'、'b' 或 'c'的任何行匹配

---> sed -e '/[a-z]/d' ping.sh >1         将有a-z字母的行都去掉

/^[abc]/        将与以 'a'、'b'或 'c'开始的任何行匹配

---> sed -e '/[a-z]/d' ping.sh >1         将开头是a-z的行都删除

9.    sed -n -e'/{/,/}/p' ping.sh >1

----> 注意这是输出命令(p),是输出{}之间的内容

请注意新的 '-n'选项,该选项告诉 sed 除非明确要求打印模式空间,否则不这样做。

您还会注意到,我们用'p' 命令替换了 'd' 命令,如您所猜想的那样,这明确要求 sed

打印模式空间。就这样,将只打印匹配部分。

10.    sed -n -e'/judge[[:space:]]*(/, /^}/p'  ping.sh>1

----> 输出judge函数的所有内容

11.    如何使用 sed来执行字符串替换、创建更大的 sed 脚本以及如何使用 sed 的附加、插

入和更改行命令。

12.    替换:

sed -e's/echo/oche/'     ping.sh > 1

----> s前缀就是替换命令,就是将ping.sh中出现的echo替换为oche

----> 同时注意:只替换每行第一次出现的哦~

----> 请注意:这条命令没有改变源文件中的内容,而下面的就是可以的

sed -e's/echo/oche/g'  ping.sh >1

----> 将所有的出现的都替换  ( 全局替换吧 )

我们需要知道的是,s/// 是一个命令哦,是不可分割的呗~所以我们可以与其他的命

令一起使用!

sed -e '1,10s/echo/ohce/g'  ping.sh > 1

----> 也就是只处理1-10行( 包括1和10 )

注意:我们要知道的是:1和10指定的行结束,我们也可使用特殊的字符串结束!如

下:

sed  -e '/^$/, /^}/s/echo/ohce/g'  ping.sh > 1

----> 由空行开始执行,直到遇到 } 开始的行结束

注意:我们并没有硬性规定一定是s、/组合,这只是常规的用法,当然也可以使用别的

字符,例如

sed -e 's:echo:ooo:g' ping.sh >1      也是可以的哦~

但是一般在替换的字符串中有/才用这样的方法

例如:

sed -e 's:pt/ss.ps:pt/ss:g' ping.sh > 1

13.    sed -e's/<.>//g' ping.sh >1

---->将<>形式替换成空格!注意其中有一个 ' . ',所以最少是一个字符哦~

但是你自己运行一下,这是你需要的结果吗?!!!!

显然不是不是吗?

在我的测试代码中的内容是:

# pt/ss/ps    <>  <> <>    <...> 

#

那我本来想留下的结果是:

#  pt/ss/ps

#

但是很不幸的是结果是:

#  pt/ss/ps

这就是s///的处理机制不一样呗~!那么他会寻找最长的字符串,我们需要怎么作

呢!?

sed -e's/]*>//g' ping.sh > 1

中间是>的后面不处理

注意:有一些shell是不支持的!

14.

注意下面代码的不同:

对于处理这样一行: 

sed -e's///g' ping.sh>1                #注意此处只是匹配一个字符而已

sed -e's///g' ping.sh>1             #此处匹配以字符开头的多个字符

15.

这将匹配零或多个全部为'a'、'b'、'c'...'v'、'w'、'x' 的字符。另外,可以使用

'[:space:]'字符类来匹配

空格。以下是可用字符类的相当完整的列表:

字符类            描述

[:alnum:]           字母数字 [a-zA-Z 0-9]

[:alpha:]           字母 [a-zA-Z]

[:blank:]           空格或制表键

[:cntrl:]              任何控制字符

[:digit:]              数字[0-9]

[:graph:]          任何可视字符(无空格)

[:lower:]             小写[a-z]

[:print:]              非控制字符

[:punct:]           标点字符

[:space:]           空格

[:upper:]           大写[A-Z]

[:xdigit:]           十六进制数字 [0-9a-fA-F]

16.   高级替换功能

我们现在想在所有的行前面加上MM,那么怎么处理呢?是所有的行哦~

sed -e's/.*/MM: &/g' ping.sh >1

   ----> 就是 & 符号处理0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值