Chinaunix首页 | 论坛 | 博客
  • 博客访问: 171216
  • 博文数量: 76
  • 博客积分: 3560
  • 博客等级: 中校
  • 技术积分: 860
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-17 13:02
文章存档

2011年(2)

2010年(41)

2009年(33)

我的朋友

分类: LINUX

2010-09-17 16:09:04

1、显示所有含有字符"a"的行
复制内容到剪贴板
代码:
sed -n "/a/p" a.txt
-n开关是表示输出由编辑指令控制,p开关是有条件显示开关,在些处就是仅显示有"a"字符的行。
2、显示所有以字符"a"开头的行
复制内容到剪贴板
代码:
sed -n "/^a/p" a.txt
符号"^"在这里不是起到转义的作用而是表示行的开始,这个和findstr中的用法是一样的。
3、不显示所有含有"a"字符的行
复制内容到剪贴板
代码:
sed "/a/d" a.txt
d开关是表示删除的意思。
4、不显示所有以"a"字符开头的行
复制内容到剪贴板
代码:
sed "/^a/d" a.txt
5、将文本中所有的"b"字符替换为"bathome"
复制内容到剪贴板
代码:
sed "s/b/bathome/" a.txt
s开关是替换开关,开启此开关后将会将第一个//间的字符替换为第二个//间的字符。
6、将文本中以"a"开头的行全部替换为"bathome"
复制内容到剪贴板
代码:
sed "s/^a.*/bathome/" a.txt
7、不显示文本中前5行
复制内容到剪贴板
代码:
sed 1,5d a.txt
即为删除文本前期前5行。
8、显示文本中5-8行
复制内容到剪贴板
代码:
sed -n 5,8p a.txt
一样的要用-n开关先将输出定向到编辑指令控制。
9、将文本中所有"a"替换为"A",同时删除所有含有字符"-1"的行,并将所有以"b"开头的行替换为"bathome"
复制内容到剪贴板
代码:
sed -e "s/a/A/" -e "/-1/d" -e "s/^b.*/bathome/" a.txt
-e开关是sed中多个命令的连接开关。
10、删除除了以"3"字符打头的行以外的所有行
复制内容到剪贴板
代码:
sed "/^3/!d" a.txt
!开关是表示以什么样的条件不执行命令,在这里就是碰到以"3"字符打头的行不执行删除命令。

第5点,关于s的解释,可能这样更准确:
引用:
sed 's/foo/bar/' # replaces only 1st instance in a line
sed 's/foo/bar/4' # replaces only 4th instance in a line
sed 's/foo/bar/g' # replaces ALL instances in a line
sed '1s/foo/bar/' # replaces only 1st instance in 1st line
批处理,应该拿来做有意义的事。

不求最大,但求最好,做最实用的批处理论坛。

连载二

a.txt内容如下:
复制内容到剪贴板
代码:
1-a a-1 aa
2-a a-2 aa
3-a a-3 aa
4-a a-4 aa
5-a a-5 aa
11、将文本中每行第二个"a"替换为"b"
复制内容到剪贴板
代码:
sed "s/a/b/2" a.txt
12、将文本中每行所有的"a"替换为"b"
复制内容到剪贴板
代码:
sed "s/a/b/g" a.txt
13、将文本中第1-3行中第三个"a"替换为"b"
复制内容到剪贴板
代码:
sed "1,3s/a/b/3" a.txt
14、将文本中第3-5行中第一、三个"a"替换为"b"
复制内容到剪贴板
代码:
sed -e "3,5s/a/b/1" -e "3,5s/a/b/3" a.txt
15、除了第四行外将所有行的第二个"a"替换为"b"
复制内容到剪贴板
代码:
sed "4!s/a/b/2" a.txt
***共同提高***

连载三

a.txt内容如下:
复制内容到剪贴板
代码:
1:basktop at time to door

2:basktop at time to door

3:bathome is webbbs

4:you can not do it

5:yes you need to watch the game

6:he is write for bat

7:he is write for bat

8:you can not do it
16、删除文本中所有的空行
复制内容到剪贴板
代码:
sed "/^$/d" a.txt
"^"表示行的开始,"$"表示行的结束,用"^$"就表示空行,用d开关将所有的空行删除。
17、删除文本最后一行
复制内容到剪贴板
代码:
sed $d a.txt
也可先用n开关来将输出定向到编辑指令,然后用p开关来显示所有的
行,并用$!来屏蔽最后一行:sed -n $!p a.txt。
18、删除文本中第2行到第一个"write"所在行之间所在的所有内容(含这个"write"所在行)
复制内容到剪贴板
代码:
sed "2,/write/d" a.txt
19、在含有"need"字符的所在行后插入"批处理"字符(另起一行)
复制内容到剪贴板
代码:
sed "/need/a\批处理" a.txt
a开关是表示在文本中插入内容,后面必须要跟上"\"
20、在文本中每行后插入"批处理"字符(另起一行)
复制内容到剪贴板
代码:
sed "a\批处理" a.txt
当a开关前没有任何条件限制时"\"后面所跟的任何字符将被当做插入内容而通篇插入。
21、在文本中每行前插入"批处理"字符(前一行)
复制内容到剪贴板
代码:
sed "i\批处理" a.txt
22、在文本中含有"write"字符的行前插入"批处理"字符(前一行)
复制内容到剪贴板
代码:
sed "/write/i\批处理" a.txt
i开关的作用和a开关相似,只是插入的位置是一前一后。
23、显示文本的奇数行(含空行)
复制内容到剪贴板
代码:
sed -n -e "p" -e "n" a.txt
在sed中用n表示奇数行,用p表示偶数行。
24、显示文本的偶数行(含空行)
复制内容到剪贴板
代码:
sed -n -e "n" -e "p" a.txt
在此处只会显示7行空行。
25、统计行数
复制内容到剪贴板
代码:
sed -n "$=" a.txt
这个没有多说的,大家记住就好了。

[ 本帖最后由 batman 于 2008-9-26 11:49 编辑 ]
***共同提高***

连载四

a.txt内容如下:
复制内容到剪贴板
代码:
we he she they
we he she they
they our his him my
we he she they
my me you your her
they our his him my
26、将指定字符进行变形
复制内容到剪贴板
代码:
sed "s/\(t\)\(h\)\(e\)\(y\)/\4\1\3\2/" a.txt
在这里所有"\'都是转义符,而\4就代表前面字符串中的第4个字符,其它以此类推,再用s开关进行替换,就达到了将字符进行变形的目的,如是4321的顺序则将指定字符进行了反转。
27、将整行字符进行反转
复制内容到剪贴板
代码:
sed "/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//" a.txt
关于这个本人也没有理解过来,大家先死记住就好了。
28、删除重复行(保留本行)
复制内容到剪贴板
代码:
sed -n "G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P" a.txt
一样是死记,本人觉得不如bat。
29、显示3的倍数行
复制内容到剪贴板
代码:
sed -n "n;n;p" a.txt
先用n开关将输出定向到编辑指令,然后输入法3-1个n;最后用显示开
关p结尾,也就时说3前的数字的倍数行不显示,只显示3的倍数行。
30、在所有的行下加上行号将在行号加上字符":"
复制内容到剪贴板
代码:
sed "/./=" a.txt|sed "/./N; s/\n/:/"
这是sed的一个正则表达式,先是自己定义/./的值是a.txt,这个是必须定义的,如直接写成sed "/a.txt/n;s/\n/:/"是会出错的,后面的s/\n/:/是表示用":"来做分隔符,如省去则会默认将一个空行来做为分隔符,这样行号就变成了插入在本行前面了,";"是个命令连接符。
31、在行首插入字符(含空格)
复制内容到剪贴板
代码:
sed "s/^/bathome/" a.txt
其实就是用s开关将行首的空字符替换为要插入的字符,那么在行尾增加字符便可写成sed "s/$/bathome/" a.txt。
32、在每行后增加一空行
复制内容到剪贴板
代码:
sed G a.txt
不多说了,这个简单好记。
33、在每行后增加5行空行
复制内容到剪贴板
代码:
sed "G;G;G;G;G;G" a.txt
这个好理解,增加多少行就写多少个G;最后用G结束。
34、在含有"me"字符的行后增加一空行
复制内容到剪贴板
代码:
sed "/me/G" a.txt
35、在含有"me"字符的行前增加一空行
复制内容到剪贴板
代码:
sed "/me/{x;p;x;}" a.txt
这个比较复杂点,大家只要记住这种用法就好了。

[ 本帖最后由 batman 于 2008-9-26 11:50 编辑 ]
***共同提高***

 

连载五

文本a.txt内容如下
复制内容到剪贴板
代码:
123456789
abcdefg
gfabced
1790562.4345
批处理 bat
36、将文本右对齐
复制内容到剪贴板
代码:
sed -e :a -e "s/^.\{1,79\}$/ &/;ta" a.txt
在这里":a"是sed在每行行首设立的用来跳转的标签,再由后面的t开关来检测在
本行命令是否执行完,没有执行完则继续执行,执行完了则跳转到下一个:a标签
处(也就是跳到下一行),这就其实是一个循环了,同时要说明一下的是"&"是表
示的前面命令中保存的字符也就是每行原有的字符,前面的" "则是自动在行前补
空格,当然我们也可以改成任意字符。另要说明的虽然默认的一行有80个字符,
但在这里最多只能设为79,当然这个数字我们也可以修改。
37、将文本内容居中
复制内容到剪贴板
代码:
sed -e a: -e "s/^.\{1,79\}$/ & /;ta" a.txt
如果大家理解了上面36中的命令,相信这个命令就没问题了,同理将本来不是左
对文的文本进行左对齐也就没问题了。
38、显示文本含有数字的行
复制内容到剪贴板
代码:
sed -n "/[0-9]/p" a.txt
这一用法和findstr极为相似,同理删除含数字行就是sed "/[0-9]/d" a.txt。
39、将文本中的字母换成大写
复制内容到剪贴板
代码:
sed "y/abcdefg/ABCDEFG/" a.txt
y开关是sed中真正的变形开关,同理可以将文本中的数字全变成大写数字。
40、将文本中数字加上,分隔符
复制内容到剪贴板
代码:
sed -e :a -e "s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta" a.txt
这也是一个循环。
***共同提高***

 

连载六

有a.txt内容如下:
复制内容到剪贴板
代码:
1:When I was a little girl, I found love in a box all because of a class assignment.
2:On a Friday night I made an announcement at the dinner table.
3:The words bubbled out in a torrent of excitement I could no longer contain.
4:“My teacher said we have to bring a box for our valentines on Monday.
5:But it has to be a special box, all decorated.”
6:Mother said, “We’ll see,” and she continued eating.
7:I wilted faster than a flower with no water.
8:What did “We’ll see” mean?
9:I had to have that box or there would be no valentines for me.
10:My second grade Valentine’s Day would be a disaster.
41、根据用户输入的内容"pause"来取代第5-8行所有的内容(非每行)
复制内容到剪贴板
代码:
sed "5,8c\pause" a.txt
c开关是sed中用用户输入内容来取代原本内容的,其后紧跟"\",用这种方法同样可以将指定行替换为空行(并不是严格意义上的空行,至少有一个空格),如:sed "9c\ " a.txt。
42、根据用户输入的内容"pause"来取代文本所有的行
复制内容到剪贴板
代码:
sed "1,$c\pause" a.txt
1,$表示的是从第一行到最后一行
43、删除文本所有行首的四个字符
复制内容到剪贴板
代码:
sed "s/^....//" a.txt
其实就是将行首的四个字符替换为空。
44、删除文本所有行尾的四个字符
复制内容到剪贴板
代码:
sed "s/....$//" a.txt
45、将文本行右移四个字符位
复制内容到剪贴板
代码:
sed "s/^/    /" a.txt
即将行首(实际是一个空字符)替换为四个空格,也就在每行前加入了四个空格而将行右移了四位。

阅读(410) | 评论(0) | 转发(0) |
0

上一篇:linux sed命令详解

下一篇:sed命令练习.

给主人留下些什么吧!~~