- 论坛徽章:
- 8
|
本帖最后由 waker 于 2012-03-08 13:38 编辑
先试试1-8题吧
第一题:
awk -F ' ' 这等同于缺省设置,以"空白"分割域,并忽略行首尾的"空白"
awk -F '[ ]' 以单个空格符分割域,多个空格之间将产生"空域",空格符位于行首尾将产生"空域"
awk -F '[ ]+'以连续空格符分割域,连续空格符位于行首尾将产生"空域"
第二题:不一样,awk会对每行都匹配两个模式,而sed匹配到第一个模式后会在"下面"行中尝试匹配第二个模式
例子
- [waker@freebsd ~]$ cat urfile
- barfoo
- foo1,foo2
- foobar
- foo2
- [waker@freebsd ~]$ awk '/foo1/,/foo2/' urfile
- foo1,foo2
- [waker@freebsd ~]$ sed -n '/foo1/,/foo2/p' urfile
- foo1,foo2
- foobar
- foo2
复制代码 第三题:第四题:
不太明白,猜一下吧- echo 'aaabcccaaabbbccceeeaaaffcccaaabbbffccc'|sed 's/\(\(.\)\2*\)/\1\n/g;:a;s/\([^ ]\+\n\)\(.*\n\)\1/\1\2/;ta;s/\n//g'
复制代码 第五题: 既然双引号中的\<newline>是续行符,为什么结果不是"foo barabc def"?
因为我们通常讨论的\转义啊" '引用啊是在讨论shell如何解释命令,而这个命令替代中的\<newline>是从子进程的标准输出来的,暂时和转不转义没有关系?
在命令替代发生以后通过shell又要来解释替代取得的结果的时候,由于""引用的保护,echo 命令只有一个参数,`foo bar\
abc def';文件的内容就"原样"输出了
第六题: 同第五题,在命令替代发生以后通过shell又要来解释替代取得的结果的时候,因为没用引用,替代的结果进行一次单词分割(word splitting),
echo 有四个参数 `foo' `bar\' `abc' `def',两个空格变一个其实是:2-2+1=1
第七题:
如果确定c不在最后一行- echo '/a/,?c?p'|ed -s urfile
复制代码 如果不能确定的话- ed -s urfile <<\EOF
- /a/ks
- g/c/ke
- `s,`ep
- q
- EOF
复制代码 第八题:
- seq 9|awk '{a[NR]=$0}END{for(i=1;i<NR;i++)print a[i],a[i+1],a[i+2]}'
复制代码- seq 11|sed 'N;:a;N;s/\n/ /gp;s/[^ ]* //;ta'
复制代码 |
|