6.sed
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sed
Linux sed命令是利用script来处理文本文件。 sed可依照script的指令,来处理、编辑文本 文件。 Sed主要用来自动编辑一个或多个文件;简 化对文件的反复操作;编写转换程序等。
语法 : sed [-hnV][-e<script>][-f<script文件>][文本文件] 参数说明: -e<script>或--expression=<script> 以选项中指 定的script来处理输入的文本文件。 -f<script文件>或--file=<script文件> 以选项中指 定的script文件来处理输入的文本文件。 -h或--help 显示帮助。 -n或--quiet或--silent 仅显示script处理后的结果。 -V或--version 显示版本信息。
$ sed --expression='s/test/check/' -expression='/love/d' example 一个比-e更好的命令是--expression。它能给sed表达式赋 值。
从文件读入:r命令 $ sed '/test/r file' example -file里的内容被读进来,显示在与test匹配的行 后面,如果匹配多行,则file的内容将显示在所 有匹配行的下面。
wenku.baidu.com
试试看
1.
2.
3.
4. 5.
将 /etc/passwd 的内容列出并且列出行号, 同时,请将第 2~5 行删除! 只删除第 2 行 要删除第 3 到最后一行 在第二行后加上hello world 在第二行前加上hello world
# nl /etc/passwd | sed '2,5d‘ # nl /etc/passwd | sed '2d' # nl /etc/passwd | sed '3,$d' # nl /etc/passwd | sed '2a hello world' # nl /etc/passwd | sed '2i hello world'
选定行的范围:逗号
$ sed -n '/test/,/check/p' example 所有在模板test和check所确定的范围内的行都被打 印。 $ sed -n '5,/^test/p' example 打印从第五行开始到第一个包含以test开始的行之间 的所有行。
$ sed '/test/,/check/s/$/sed test/' example 对于模板test和west之间的行,每行的末尾用字符串 sed test替换。
以行为单位的替换与显示
将第2-5行的内容取代成为『No 2-5 number』 #nl /etc/passwd | sed '2,5c No 2-5 number‘ 通过这个方法我们就能够将数据整行取代了! 仅列出 /etc/passwd 文件内的第 5-7 行 # nl /etc/passwd | sed -n '5,7p' 删除/etc/passwd所有包含root的行,其他行输出 # nl /etc/passwd | sed '/root/d'
规则表达式混乱 sed 命令将匹配从 '<' 开始、到 '>' 结束、并且在其中包 含任意数量字符的短语。下例将删除该短语(用空字符 串替换): $ sed -e 's/<.*>//g' myfile.html $ sed -e 's/<[^>]*>//g' myfile.html 在上例中,'[^>]' 指定“非 '>'”字符,其后的 '*' 完成该 表达式以表示“零或多个非 '>' 字符”。对几个 html 文 件测试该命令,将它们管道输出 "more",然后仔细查看 其结果。
删除:d命令
$ sed '2d' example----- 删除example文件的第二 行。 $ sed '2,$d' example-----删除example文件的第二行到 末尾所有行。 $ sed '$d' example-----删除example文件的最后一 行。 $ sed '/test/'d example-----删除example文件所有包 含test的行。
写入文件:w命令
$ sed -n '/test/w file' example 在example中所有包含test的行都被写入file里。
sed -e '/^$/,/^END/s/hills/mountains/g' myfile3.txt 该例将用 'mountains' 替换 'hills',但是,只 从空行开始,到以三个字符 'END' 开始的行结 束(包括这两行)的文本块上这样做。 sed -e 's:/usr/local:/usr:g' mylist.txt 使用冒号作为分隔符
$ sed -n 's/^test/mytest/p' example (-n)选项和p标志一起使用表示只打印那些发生替换的行。也就 是说,如果某一行开头的test被替换成mytest,就打印它。
$ sed 's/^192.168.0.1/&localhost/' example &符号表示替换换字符串中被找到的部份所有以192.168.0.1开头 的行都会被替换成它自已加 localhost,变成 192.168.0.1localhost。
替换:s命令
$ sed -e 's/linux/windows/' testfile sed -e 's/linux/windows/g' testfile $ sed -e ‘2,3s/linux/windows/g‘ testfile sed -e ‘2,3s/linux/windows/ ‘ testfile 每行第一个
高级替换功能
$ sed -e 's/.*/ralph said: &/' origmsg.txt CODE: ralph said: Hiya Jim, ralph said: ralph said: I sure like this sed stuff! ralph said:
该例的替换字符串中使用了 '&' 字符,该字符告诉 sed 插入整个匹配的规则表达式。因此,可以将与 '.*' 匹配的任何内容(行中的零或多个字符的最大组 或整行)插入到替换字符串中的任何位置,甚至多 次插入。这非常好,但 sed 甚至更强大。
$ sed -n 's/\(love\)able/\1rs/p' example love被标记为1,所有loveable会被替换成lovers,而且替换的行 会被打印出来。
$ sed 's#10#100#g' example 不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以, “#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10 替换成100。
test_sed的内容是: 1234567890 2345678901 3456789012 4567890123
(1 ) sed 'y/1234567890/ABCDEFGHIJ/' test_sed sed 'y/1234567890/ABCDEFGHIJ/' filename ABCDEFGHIJ BCDEFGHIJA CDEFGHIJAB DEFGHIJABC 注意变换关系是按两个list的位置对应变换
(2)替换每行所有匹配 sed 's/01/Ab/g' test_sed 1234567890 23456789Ab 3456789Ab2 456789Ab23 注意:第一行的0,1没有分别替换为A,b
sed -i "s/zhangsan/lisi/g" `grep zhangsan rl /modules` -i 表示inplace edit,就地修改文件 -r 表示搜索子目录 -l 表示输出匹配的文件名
动作说明:
a :新增, a 的后面接字串,会在新的一行出现 c :取代, c 的后面接字串,这些字串取代 n1,n2 之 间的行! d :删除, d 后面通常不接任何 ; i :插入, i 的后面接字串,字串会在上一行出现(目 前的); p :列印 通常 p 会与参数 sed -n 一起运行~ s :取代 通常 s 的动作可以搭配正规表示法!例如 1,20 s/old/new/g 就是啦!
多点编辑:e命令
(-e)选项允许在同一行里执行多条命令。 $ sed -e '1,5d' -e 's/test/check/' example 如例第一条命令删除1至5行,第二条命令用check替换test。
命令的执 行顺序对结果有影响。如果两个命令都是替换命 令,那么第一个替换命令将影响第二个替换命令的结果。
在testfile文件的第四行后添加一行,并将结果输 出到标准输出,在命令行提示符下输入如下命令: sed -e 4a\newLine testfile
$ cat testfile #查看testfile 中的内容 HELLO LINUX! This is a linux testfile! Linux test
Linux sed命令是利用script来处理文本文件。 sed可依照script的指令,来处理、编辑文本 文件。 Sed主要用来自动编辑一个或多个文件;简 化对文件的反复操作;编写转换程序等。
语法 : sed [-hnV][-e<script>][-f<script文件>][文本文件] 参数说明: -e<script>或--expression=<script> 以选项中指 定的script来处理输入的文本文件。 -f<script文件>或--file=<script文件> 以选项中指 定的script文件来处理输入的文本文件。 -h或--help 显示帮助。 -n或--quiet或--silent 仅显示script处理后的结果。 -V或--version 显示版本信息。
$ sed --expression='s/test/check/' -expression='/love/d' example 一个比-e更好的命令是--expression。它能给sed表达式赋 值。
从文件读入:r命令 $ sed '/test/r file' example -file里的内容被读进来,显示在与test匹配的行 后面,如果匹配多行,则file的内容将显示在所 有匹配行的下面。
wenku.baidu.com
试试看
1.
2.
3.
4. 5.
将 /etc/passwd 的内容列出并且列出行号, 同时,请将第 2~5 行删除! 只删除第 2 行 要删除第 3 到最后一行 在第二行后加上hello world 在第二行前加上hello world
# nl /etc/passwd | sed '2,5d‘ # nl /etc/passwd | sed '2d' # nl /etc/passwd | sed '3,$d' # nl /etc/passwd | sed '2a hello world' # nl /etc/passwd | sed '2i hello world'
选定行的范围:逗号
$ sed -n '/test/,/check/p' example 所有在模板test和check所确定的范围内的行都被打 印。 $ sed -n '5,/^test/p' example 打印从第五行开始到第一个包含以test开始的行之间 的所有行。
$ sed '/test/,/check/s/$/sed test/' example 对于模板test和west之间的行,每行的末尾用字符串 sed test替换。
以行为单位的替换与显示
将第2-5行的内容取代成为『No 2-5 number』 #nl /etc/passwd | sed '2,5c No 2-5 number‘ 通过这个方法我们就能够将数据整行取代了! 仅列出 /etc/passwd 文件内的第 5-7 行 # nl /etc/passwd | sed -n '5,7p' 删除/etc/passwd所有包含root的行,其他行输出 # nl /etc/passwd | sed '/root/d'
规则表达式混乱 sed 命令将匹配从 '<' 开始、到 '>' 结束、并且在其中包 含任意数量字符的短语。下例将删除该短语(用空字符 串替换): $ sed -e 's/<.*>//g' myfile.html $ sed -e 's/<[^>]*>//g' myfile.html 在上例中,'[^>]' 指定“非 '>'”字符,其后的 '*' 完成该 表达式以表示“零或多个非 '>' 字符”。对几个 html 文 件测试该命令,将它们管道输出 "more",然后仔细查看 其结果。
删除:d命令
$ sed '2d' example----- 删除example文件的第二 行。 $ sed '2,$d' example-----删除example文件的第二行到 末尾所有行。 $ sed '$d' example-----删除example文件的最后一 行。 $ sed '/test/'d example-----删除example文件所有包 含test的行。
写入文件:w命令
$ sed -n '/test/w file' example 在example中所有包含test的行都被写入file里。
sed -e '/^$/,/^END/s/hills/mountains/g' myfile3.txt 该例将用 'mountains' 替换 'hills',但是,只 从空行开始,到以三个字符 'END' 开始的行结 束(包括这两行)的文本块上这样做。 sed -e 's:/usr/local:/usr:g' mylist.txt 使用冒号作为分隔符
$ sed -n 's/^test/mytest/p' example (-n)选项和p标志一起使用表示只打印那些发生替换的行。也就 是说,如果某一行开头的test被替换成mytest,就打印它。
$ sed 's/^192.168.0.1/&localhost/' example &符号表示替换换字符串中被找到的部份所有以192.168.0.1开头 的行都会被替换成它自已加 localhost,变成 192.168.0.1localhost。
替换:s命令
$ sed -e 's/linux/windows/' testfile sed -e 's/linux/windows/g' testfile $ sed -e ‘2,3s/linux/windows/g‘ testfile sed -e ‘2,3s/linux/windows/ ‘ testfile 每行第一个
高级替换功能
$ sed -e 's/.*/ralph said: &/' origmsg.txt CODE: ralph said: Hiya Jim, ralph said: ralph said: I sure like this sed stuff! ralph said:
该例的替换字符串中使用了 '&' 字符,该字符告诉 sed 插入整个匹配的规则表达式。因此,可以将与 '.*' 匹配的任何内容(行中的零或多个字符的最大组 或整行)插入到替换字符串中的任何位置,甚至多 次插入。这非常好,但 sed 甚至更强大。
$ sed -n 's/\(love\)able/\1rs/p' example love被标记为1,所有loveable会被替换成lovers,而且替换的行 会被打印出来。
$ sed 's#10#100#g' example 不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以, “#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10 替换成100。
test_sed的内容是: 1234567890 2345678901 3456789012 4567890123
(1 ) sed 'y/1234567890/ABCDEFGHIJ/' test_sed sed 'y/1234567890/ABCDEFGHIJ/' filename ABCDEFGHIJ BCDEFGHIJA CDEFGHIJAB DEFGHIJABC 注意变换关系是按两个list的位置对应变换
(2)替换每行所有匹配 sed 's/01/Ab/g' test_sed 1234567890 23456789Ab 3456789Ab2 456789Ab23 注意:第一行的0,1没有分别替换为A,b
sed -i "s/zhangsan/lisi/g" `grep zhangsan rl /modules` -i 表示inplace edit,就地修改文件 -r 表示搜索子目录 -l 表示输出匹配的文件名
动作说明:
a :新增, a 的后面接字串,会在新的一行出现 c :取代, c 的后面接字串,这些字串取代 n1,n2 之 间的行! d :删除, d 后面通常不接任何 ; i :插入, i 的后面接字串,字串会在上一行出现(目 前的); p :列印 通常 p 会与参数 sed -n 一起运行~ s :取代 通常 s 的动作可以搭配正规表示法!例如 1,20 s/old/new/g 就是啦!
多点编辑:e命令
(-e)选项允许在同一行里执行多条命令。 $ sed -e '1,5d' -e 's/test/check/' example 如例第一条命令删除1至5行,第二条命令用check替换test。
命令的执 行顺序对结果有影响。如果两个命令都是替换命 令,那么第一个替换命令将影响第二个替换命令的结果。
在testfile文件的第四行后添加一行,并将结果输 出到标准输出,在命令行提示符下输入如下命令: sed -e 4a\newLine testfile
$ cat testfile #查看testfile 中的内容 HELLO LINUX! This is a linux testfile! Linux test