分页: 1 / 1
一个sed命令的疑惑,麻烦达人解释一下
发表于 : 2008-11-27 17:48
由 mgqw
此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 是什么意思???
麻烦各位达人解释一下,小菜找了半天资料看晕了还是看不出个所以然。

Re: 一个sed命令的疑惑,麻烦达人解释一下
发表于 : 2008-11-28 0:59
由 Dic4000
只能给你解释一部分,我也刚刚接触这个命令。选项 -n 会让sed只打印那些匹配模式的行.
末尾的n是大概意思是读取模式空间的下一行,什么是模式空间我也不懂,man中有关于n的说明: Read/append the next line of input into the pattern space.
选项p是打印
/test/{n;n;n;n;n;b;}这种写法我是第一次遇到,也不知道,麻烦后来人解释一下

Re: 一个sed命令的疑惑,麻烦达人解释一下
发表于 : 2008-11-28 15:28
由 mgqw
你说的那些我都晓得……………… 还是谢谢了。
主要是:前面那个 $ 是什么意思??
p是打印输出(与 -n 一起用),但是最后那个 \np 是什么意思???

Re: 一个sed命令的疑惑,麻烦达人解释一下
发表于 : 2008-11-28 16:32
由 qqttdh
sed不常用。。。
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
Re: 一个sed命令的疑惑,麻烦达人解释一下
发表于 : 2008-11-30 16:24
由 mgqw
折腾了n久,得到一个答案:是bash的引用展开。
代码: 全选
$ sed -n $'/test/{n;n;n;n;n;b;}\np' test
等同于:
代码: 全选
sed -n '/test/{n;n;n;n;n;b};p' test

Re: 一个sed命令的疑惑,麻烦达人解释一下
发表于 : 2008-12-07 10:12
由 prettya1
sed '/test/{N;N;N;N;N;d}' test 就可以了.尽可能简单易懂.