一个sed命令的疑惑,麻烦达人解释一下

sh/bash/dash/ksh/zsh等Shell脚本
回复
mgqw
帖子: 59
注册时间: 2006-11-09 21:06
来自: 深圳

一个sed命令的疑惑,麻烦达人解释一下

#1

帖子 mgqw » 2008-11-27 17:48

此sed命令是删除指定字符串行后面五行数据(包含本身),语句如下:

代码: 全选

$ cat test
... ...
test
1
2
3
4
5
... ...

$ sed  -n $'/test/{n;n;n;n;n;b;}\np' test
... ...
... ...
其他地方都可以看明白,就是语句 $'/test/{n;n;n;n;n;b;}\np' 前面那个 $ 是什么意思??
我晓得是p是打印输出,但是最后那个 \np 是什么意思???
麻烦各位达人解释一下,小菜找了半天资料看晕了还是看不出个所以然。 :em20 :em20
Dic4000
帖子: 104
注册时间: 2008-09-10 21:06

Re: 一个sed命令的疑惑,麻烦达人解释一下

#2

帖子 Dic4000 » 2008-11-28 0:59

只能给你解释一部分,我也刚刚接触这个命令。选项 -n 会让sed只打印那些匹配模式的行.
末尾的n是大概意思是读取模式空间的下一行,什么是模式空间我也不懂,man中有关于n的说明: Read/append the next line of input into the pattern space.
选项p是打印
/test/{n;n;n;n;n;b;}这种写法我是第一次遇到,也不知道,麻烦后来人解释一下 :em06
mgqw
帖子: 59
注册时间: 2006-11-09 21:06
来自: 深圳

Re: 一个sed命令的疑惑,麻烦达人解释一下

#3

帖子 mgqw » 2008-11-28 15:28

你说的那些我都晓得……………… 还是谢谢了。
主要是:前面那个 $ 是什么意思??
p是打印输出(与 -n 一起用),但是最后那个 \np 是什么意思??? :em20
头像
qqttdh
帖子: 896
注册时间: 2007-07-20 22:15

Re: 一个sed命令的疑惑,麻烦达人解释一下

#4

帖子 qqttdh » 2008-11-28 16:32

sed不常用。。。 :em06


shell懂一点。。。
echo $'/test/{n ; b ;} \n p p \n p'
sed -n $'/test/{n ; b ;} \n p p \n p' test
sed -n $'/test/{n ; b ;} \n p \n p \n p \n p' test

和sed空间的布局有关。。。

再加点

a=$'/test/{n ; b ;} \n p \n p \n p \n p'
sed -n "$a" test

test

代码: 全选

34
342
2434
#rer
R#
   R##
test
    test



test
发言并不是一种义务,最喜欢的回答是不知道
两个手指点击,居然默认就是鼠标中键功能
右上角是中键,右下角是左键
Grub真小,才512B
零度电子书(Unix&Linux)
http://books.05sun.com/downlist/s_62_3.html
win7恢复能力不如xp,ubuntu相对较稳定。。。待机恢复起来似乎。。。
mgqw
帖子: 59
注册时间: 2006-11-09 21:06
来自: 深圳

Re: 一个sed命令的疑惑,麻烦达人解释一下

#5

帖子 mgqw » 2008-11-30 16:24

折腾了n久,得到一个答案:是bash的引用展开。

代码: 全选

$ sed  -n $'/test/{n;n;n;n;n;b;}\np' test
等同于:

代码: 全选

sed  -n '/test/{n;n;n;n;n;b};p' test
:em20 :em20 :em20
prettya1
帖子: 5
注册时间: 2008-03-31 15:58

Re: 一个sed命令的疑惑,麻烦达人解释一下

#6

帖子 prettya1 » 2008-12-07 10:12

sed '/test/{N;N;N;N;N;d}' test 就可以了.尽可能简单易懂.
回复