sed命令:

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

sed语法格式:

sed [options] 'command' file

匹配字符集

^匹配行开始,如:/^sed/匹配所有以sed开头的行。
$匹配行结束,如:/sed$/匹配所有以sed结尾的行。
.匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
*匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[]匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。
[^]匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\)匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
&保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\<匹配单词的开始,如:/\匹配单词的结束,如/love
\>/匹配包含以love结尾的单词的行。
x\{m\}重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。
x\{m,\}重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。
x\{m,n\}重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。
sed命令常见用法:

打印指定行

[root@test1~]#grep-n'.*'passwd|sed'10'p-n

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

#打印第10行

[root@test1~]#grep-n'.*'passwd|sed'1,3'p-n

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

#打印第1-3行

[root@test1~]#grep-n'.*'passwd|sed'22,$'p-n

sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

MysqL:x:500:500::/home/MysqL:/sbin/nologin

zabbix:x:501:501::/home/zabbix:/sbin/nologin

#打印第22行到最后

打印匹配字符的行

[root@test1~]#sed-n'/root/'ppasswd

[root@test1~]#sed-n'/r\(oo\)\+t/'ppasswd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[root@test1~]#sed-r-n'/r(oo)+t/'ppasswd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

#可以使用^$.*+?()等特殊符号正则表达式需要脱义或者使用-r参数

打印多个匹配字符的行 2中方法

[root@test1~]#grep-n'.*'passwd|sed-n-e'/root/'p-e'/MysqL/'p

1:root:x:0:0:root:/root:/bin/bas/MysqLh

1:root:x:0:0:root:/root:/bin/bas/MysqLh

11:operator:x:11:0:operator:/root:/sbin/nologin

22:MysqL:x:500:500::/home/MysqL:/sbin/nologin

#第一行同时匹配2个字符输出2次流式编辑器特点

[root@test1~]#grep-n'.*'passwd|sed-n'/root/p;/MysqL/p'

root:x:0:0:root:/root:/bin/bas/MysqLh

root:x:0:0:root:/root:/bin/bas/MysqLh

operator:x:11:0:operator:/root:/sbin/nologin

删除以数字开头的行

[root@test1~]#sed-r'/[^0-9]/'dpasswd

替换 sed的主要功能就是用来替换

[root@test1~]#sed'1,2s/ot/to/g'passwd
roto:x:0:0:roto:/roto:/bin/bas/MysqLh
bin:x:1:1:bin:/bin:/sbin/nologin
#其中s表示替换,g表示全局替换,否则只替换一次,/也可以为#、@等

删除第一行所有数字

[root@test1~]#grep'.*'passwd|sed'1,1s/[0-9]//g'
root:x:::root:/root:/bin/bas/MysqLh
bin:x:1:1:bin:/bin:/sbin/nologin

调换两个字符串位置

[root@test1~]#head-2passwd|sed-r's/([^:]+)(:.*:)([^:]+$)/\3\2\1/g'
/bin/bas/MysqLh:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin

直接修改文件内容

[root@test1 ~]# sed -i 's/ot/to/g' 1.txt

正则表达式\w\+匹配每一个单词,使用[&]替换它,&对应于之前所匹配到的单词:
[root@test1~]#echothisisatestline|sed's/\w\+/[&]/g'
[this][is][a][test][line]

从文件读入:r命令

file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面:

sed'/test/rfile'filename

写入文件:w命令

在example中所有包含test的行都被写入file里:

sed-n'/test/wfile'example

追加(行下):a\命令

将thisisatestline追加到以test开头的行后面:
sed'/^test/a\thisisatestline'file在test.conf
文件第2行之后插入thisisatestline
sed-i'2a\thisisatestline'test.conf

下一个:n命令

如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续

sed'/test/{n;s/aa/bb/;}'file

变形:y命令

把1~10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令

sed'1,10y/abcde/ABCDE/'file
sed'1,10s/[a-z]/\u&/g'file
sed'1,10s/[A-Z]/\l&/g'file

退出:q命令

打印完第10行后,退出

sedsed'10q'file

打印奇数行或偶数行

方法1: sed -n 'p;n' test.txt #奇数行

sed-n'n;p'test.txt#偶数行

方法2: sed -n '1~2p' test.txt #奇数行

sed-n'2~2p'test.txt#偶数行

正则表达式-sed-用法详解的更多相关文章

  1. Html5 canvas实现粒子时钟的示例代码

    这篇文章主要介绍了Html5 canvas实现粒子时钟的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. cocoapods – 命令/ bin / sh失败,退出代码23

    适用于所有豆荚,无需豆荚但仍然是同样的错误.有任何想法吗?

  4. ios – 使用大写符号在字符串swift中获取URL的正则表达式

    我尝试在文本中获取URL.所以,在此之前,我使用了这样一个表达式:但是当用户输入带有大写符号的URL时(例如Http://Google.com,它与它不匹配)我遇到了问题.我试过了:但什么都没发生.解决方法您可以使用正则表达式中的i内联标志关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅FoundationFrameworkReference.(?ismwx-ismwx)Flagsetti

  5. 在Xcode4中,你可以更改用于显示隐形字符的字符吗?

    我更喜欢VisualStudio显示隐形的方式……

  6. ios – 应用程序商店描述特殊字符

    是不是可以在AppStore描述中使用像星星这样的特殊字符了?我得到这个错误:描述不得包含标记语言.说明不得包含以下字符:★提前致谢:)解决方法仍然允许一些unicode字符.以下字符已经过测试并仍然有效:◆√至于现在他们工作正常,但苹果可以随时再次改变条件.

  7. ios – 将数组中的字符转换为整数

    即使我搜索了文档,我似乎无法弄清楚如何做到这一点.我试图弄清楚如何将数组中索引处的字符转换为整数.例如,假设我有一个名为“容器”的字符数组,我无法弄清楚该怎么做:谢谢您的帮助!解决方法Swift并不容易在原始和类型表示之间进行转换.这是一个在此期间应该有所帮助的扩展:这使您可以非常接近您想要的:对于遇到此问题的任何工程师,请参阅rdar://17494834

  8. macos – 运行brew命令充满了’同意Xcode / iOS许可证需要管理员权限,请通过sudo以root身份重新运行.’

    所以我跑了:如果滚动到底部,可以输入“同意”,然后就可以了.

  9. ios – 如何在Swift 3中使用正则表达式?

    解决方法我相信.当没有其他选项适用时,将使用.allZeros.因此,使用Swift3,您可以传递一个空的选项列表或省略options参数,因为它默认为无选项:要么请注意,在Swift3中,您不再使用error参数.它现在抛出.

  10. ios – lldb断点在类目标c中的所有方法

    如何使用lldb在ObjectiveC类中的所有方法上自动设置断点?

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部