sed总结

  • 2015-04-07
  • 133
  • 8
  • 0

1、介绍

1.1 概述

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

1.2 常用选项

选项
使用说明
-i
直接修改读取的文件内容,而不是输出到终端。
-e
直接在命令行模式上进行sed动作编辑,多点编辑。
-n
使用安静(silent)模式。只打印匹配的行,因为sed默认会打印所有行。
-f
从指定文件中读取编辑脚本。
-r
使用扩展正则表达式。

1.3 常用参数

命令
使用说明
p
打印匹配行(和-n选项一起合用)。
d
删除(delete)指定的行。
s
字符串替换(substitude)。
a
追加新的文本(append),在指定行后添加一行或多行文本。
c
取代指定的行。
=
打印行号。
i
在指定行前添加一行或多行文本。
g

1.4 删除命令

命令
使用说明
sed ‘nd’ ab
删除第n行。
sed ‘$d’ ab
删除最后一行。
sed ‘n,md’ ab
删除第n行到第m行。
sed ‘n,$d’ ab
删除第n行到最后一行。
sed ‘/word/d’ test.txt
删除所有包含’word’的行。
sed ‘/word/ +2 d’ test.txt
删除匹配’word’的行及它下面两行。
sed ‘/^$/d’ test.txt
删除所有空行。
sed ‘/^#/’ test.txt
删除所有注释行。
sed ‘1~2d’ test.txt
删除奇数行。
sed ‘1~2!d’ test.txt
删除偶数行。
sed ‘2~2d’ test.txt
删除偶数行。

1.5 显示命令

命令
使用说明
sed -n ‘np’ ab
显示第n行
sed -n ‘$p’ ab
显示最后一行
sed -n ‘n,mp’ ab
显示第n行到第m行
sed -n ‘n,$p’ ab
显示第n行到最后一行
sed -n ‘/word/p’ test.txt
查询包含关键字word所在行
sed -n ‘/'”$变量名”‘/p’ tese.txt
匹配包含关键字为变量名的值所在的行

1.6 增加命令

若不加-i选项,则不改变源文件内容。
命令
使用说明
sed ‘na word’ test.txt
第n行后增加一行为word的字符。
sed ‘n,ma word’ test.txt
第n到m行每行后均增加一行为word的字符。
sed ‘na hello\nworld!’ test.txt
第n行后增加两行字符,一行为hello,一行为world,通过换行符\n实现。
sed ‘ni word’ test,txt
在第n行前增加一行为word的字符。
sed ‘$a word’ test.txt
在最后一行后增加一行为word的字符。

1.7 替换命令

若不加-i选项,则不改变源文件内容。
命令
使用说明
sed ‘nc word’ test.txt
用word替换第n行文本。
sed ‘n,mc word’ test.txt
用word替换第n行到第m行文本。
sed ‘s/要替换的字符串/新的字符串/g’ test.txt
替换一行中的某部分,其中/可以用其他字符代替,如#,%,@,
其中g是替换所有匹配到的行的相关内容。

2、练习

练习文本一
sed.txt:
Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300
Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
Igor Chevsky:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400
Norma Corder:397-857-2735:74 Pine Street, Dearborn, MI 23874:3/28/45:245700
Jennifer Cowan:548-834-2348:583 Laurel Ave., Kingsville, TX 83745:10/1/35:58900
Jon DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100
Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln, NB 92086:7/25/53:85100
Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200
Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
Ephram Hardy:293-259-5395:235 CarltonLane, Joliet, IL 73858:8/12/20:56700
James Ikeda:834-938-8376:23445 Aster Ave., Allentown, NJ 83745:12/1/38:45000
Barbara Kertz:385-573-8326:832 Ponce Drive, Gary, IN 83756:12/1/46:268500
Lesley Kirstin:408-456-1234:4 Harvard Square, Boston, MA 02133:4/22/62:52600
William Kopf:846-836-2837:6937 Ware Road, Milton, PA 93756:9/21/46:43500
Sir Lancelot:837-835-8257:474 Camelot Boulevard, Bath, WY 28356:5/13/69:24500
Jesse Neal:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000
Zippy Pinhead:834-823-8319:2356 Bizarro Ave., Farmount, IL 84357:1/1/67:89500
Arthur Putie:923-835-8745:23 Wimp Lane, Kensington, DL 38758:8/31/69:126000
Popeye Sailor:156-454-3322:945 Bluto Street, Anywhere, USA 29358:3/19/35:22350
Jose Santiago:385-898-8357:38 Fife Way, Abilene, TX 39673:1/5/58:95600
Tommy Savage:408-724-0140:1222 Oxbow Court, Sunnyvale, CA 94087:5/19/66:34200
Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000
Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900
1)把Jon的名字改成Jonathan,不改变源文件。
sed -n 's#Jon#Jonathan#gp' sed.txt
2)删除头三行,不改变源文件。
sed '1,3d' sed.txt
3)显示5-10行。
sed -n '5,10p' sed.txt
4)删除包含Lane的行,不改变源文件。
sed '/Lane/d' sed.txt
5)显示所有生日在November-December之间的行。
sed -n '/:1[1-2]\//p' sed.txt
6)把三个星号(***)添加到以Fred开头的行,不改变源文件。
sed -n 's#^Fred#***Fred#gp' sed.txt
7)用Jose has retired取代包含Jose开头的行,不改变源文件。
sed -n 's#^Jose.*#Jose has retired#gp' sed.txt
8)把Popeye的生日改成11/14/46。
sed -n '/Popeye/{p; s#[0-9][0-9]*/[0-9][0-9]*/[0-9][0-9]*#11/14/46#; p}' sed.txt
9)删除所有空行。
sed -i '/^$/d' sed.txt
10)在第一行之前插入标题PERSONNEL FILE,不改变源文件。
sed '1i PERSONNEL FILE' sed.txt
11)删除以500结尾的工资的行,不改变源文件。
sed '/500$/d' sed.txt
12)在文件末尾添加THE END,不改变源文件。
sed '$a THE END' sed.txt

评论

  • Matglurdy回复

    Cialis Order From Uk Vardenafil Hcl buy viagra online Cialis Generique Fiable Best Online Drugstore Comment Les Hommes Peuvent Durer Plus Longtemps

  • Matglurdy回复

    Discount Real Provera With Free Shipping Store Generic Zentel Overnight Shipping Shipped Ups cheap cialis Cephalexin Free Full Text Journal

  • Matglurdy回复

    Estrace 2mg Ivf Side Effects Femara Online Orders Cheapest Prices viagra Achat Cialis Avec Paypal Come Posso Comprare Il Viagra Finasteride Vs Propecia

  • Matglurdy回复

    Acheter Cipro En Andorre Baclofene Tabac Posologie kamagra jalea ajanta pharma Tab Dutasteride 0.5mg Next Day On Line Amex Accepted Where To Buy Alli Diet Pill Available Viagra Cialis Levitra Effetti Collaterali