红联Linux门户
Linux帮助

这些我怎么看不懂?帮忙解释一下,谢谢!

发布时间:2011-06-14 15:05:34来源:红联作者:gogo11
[i=s] 本帖最后由 gogo11 于 2011-6-14 15:12 编辑 [/i]

1、sed '1,/start/ s/#.*//' new 这里边的#.*是什么意思?是不是通配符?2、
1.5 替换和插入换行符号
替换 (echo a;echo x;echo y) | sed '/x$/ {
N
s:x\n:x:
}'

插入
(echo a;echo x;echo y) | sed 's:x:X\
:'
这个看不懂在用什么替换什么……

3、解释一下sed -n '/^.\{87\}$/p' zz.log,上边说是找出每行有87个字符的,我又看不懂了,神啊!救救我吧!

俺准备把sed和awk粗略的看一下,学习建立smb服务器,sed和awk也博大精深,两个命令都出了本书,靠!
文章评论

共有 9 条评论

  1. unranked 于 2011-06-22 08:22:38发表:

    age 果然厉害!

  2. gogo11 于 2011-06-15 08:45:16发表:

    谢谢阿哥~~~~~``````

  3. age 于 2011-06-14 21:14:13发表:

    [i=s] 本帖最后由 age 于 2011-6-14 21:20 编辑 [/i]

    sed -n '1,$ {
    =
    p
    }' file | sed -n '/[02468]$/ {
    N
    p
    }' | sed '/^[0-9]*$/d'

  4. gogo11 于 2011-06-14 20:28:22发表:

    引用:
    1. 是的, y是个子命令,用于转换, 和s有区别
    http://bbs.chinaunix.net/viewthread.php?tid=1648508

    2. []是给出一个范围,表示匹配在[]中的任一字符。
    [0-9] 表示匹配0~9的任一个字符,也就是任何数字
    [02468] ...
    age 发表于 2011-6-14 17:06

    哦,是我理解错了,我理解成了把偶数行挑出来作为一个文件了~~~~~`
    那怎么把偶数行挑出来呢?

  5. age 于 2011-06-14 17:06:28发表:

    [i=s] 本帖最后由 age 于 2011-6-14 17:08 编辑 [/i]

    1. 是的, y是个子命令,用于转换, 和s有区别
    http://bbs.chinaunix.net/viewthread.php?tid=1648508

    2. []是给出一个范围,表示匹配在[]中的任一字符。
    [0-9] 表示匹配0~9的任一个字符,也就是任何数字
    [02468] 表示匹配 0 2 4 6 8中的一个
    连起来就是前面是任意个数字,最后一位以0 2 4 6 8中的一个结尾
    比如
    00000000700 就符合
    而00000000701 就不符合

  6. gogo11 于 2011-06-14 16:59:58发表:

    gogo11@localhost:~/test$ ls -l /bin/sh
    lrwxrwxrwx 1 root root 4 2011-06-03 20:15 /bin/sh -> dash
    gogo11@localhost:~/test$ ls -l /bin/bash
    -rwxr-xr-x 1 root root 801808 2010-08-11 03:58 /bin/bash
    gogo11@localhost:~/test$
    原来sh是dash,一直以为是bash~~~~~~
    -----------------------------------------------------------------------------------------
    gogo11@localhost:~/test$ sed -n '/-1/{/张/p}' sed.txt | sed 'y/-1/10/'
    00000000700 张照健 200502098200060305 10 10 10 省科技馆 土木建筑
    00000000720 张琳 200520098702060027 10 10 10 省科技馆 综合管理
    00000000808 张婷婷 200002098303022826 10 10 10 省科技馆 综合管理
    00000000008 张世源 200282098407022327 10 10 10 省科技馆 综合管理
    00000002702 张鹏 200203098208007337 10 10 10 省科技馆 综合管理
    00000003320 张晓莉 230002098500022026 10 10 10 省科技咨询中心 科技项目管理
    00000003507 张雪松 200782098604224002 10 10 10 省科技咨询中心 科技项目管理
    00000004005 张立红 030229098302204825 10 10 10 省科技咨询中心 科技项目管理
    00000004004 张宇宏 200303098309052300 10 10 10 省科技咨询中心 科技项目管理
    这个命令y在字符串长度一样的情况下好像和s命令一个样,说明y命令是s命令的子命令,这个对吗?
    -----------------------------------------------------------------------------------------
    3.4 写入文件命令 w filename( 注意与 s 命令的 /w 选项的区别 )
    把某些行写入文件 filename
    sed -n '/^[0-9]*[02468]/ w even' 这个又看不懂了。^表示在开头匹配,*号表示匹配0~n次,[02468]表示匹配02468单个字符,合起来是什么意思?
    明天还是看看正则表达式,晕头了~~~~~~~~~~

  7. age 于 2011-06-14 15:29:07发表:

    [i=s] 本帖最后由 age 于 2011-6-14 15:31 编辑 [/i]

    引用:
    sed '/^$/ p'
    gogo11 发表于 2011-6-14 15:25

    \n是换行
    $是行尾
    二者不一样的
    因为正则表过式一般是以行为单位处理的, 所以很少用到\n, 都是$
    多行匹配时才需要用到\n

  8. gogo11 于 2011-06-14 15:25:26发表:

    sed '/^$/ p' 我记着好像行末尾标志是“\n”,这儿怎么是“$”
    正则表达式也博大精深阿!

  9. age 于 2011-06-14 15:22:15发表:

    [i=s] 本帖最后由 age 于 2011-6-14 15:30 编辑 [/i]

    引用:
    1、sed '1,/start/ s/#.*//' new 这里边的#.*是什么意思?是不是通配符?
    gogo11 发表于 2011-6-14 15:05

    这全是正则表达式的写法
    1. 这个应该是删除注释的
    #是普通字符, 也就是注释行的开始, "."代表任意一个字符, "*"表示重复前面的字符0~n次. 组合起来就是, 在#后的所有字符
    s///g这是sed的替换语法, 前一个//里写判断条件, 后一个//里写替换内容. 此处为空, 所以相当于删除匹配字段
    2. 这个有点奇怪, :一般是当标签用, 这里是代替/, 可以替换成/, 这样比较好解释点[code] 替换 (echo a;echo x;echo y) | sed '/x$/ {
    N
    s/x\n/x/
    }'[/code]N表示读入下一行, 此时可以读取换行符\n
    把x\n换成x, 这样就少了一个换行符, 从而x y将在同一行显示.
    这是输出[code][allblue@MyLady b]$ (echo a;echo x;echo y) | sed '/x$/ {
    N
    s/x\n/x/
    }'
    a
    xy[/code]类似的, ([code]echo a;echo x;echo y) | sed 's/x/X\
    :'[/code]这里的\类似换行符, 可以换成\n, 提供换行效果, 同时把x替换为X, 这样在X后就有二个换行符, 从而产生一个空行,
    输出为[code][allblue@MyLady b]$ (echo a;echo x;echo y) | sed 's/x/X\
    /'
    a
    X

    y
    [/code]3. {m,n}表示匹配前面字符多少次, m为最小值, n为最大值, 这里规定了一个范围. 可以只写一个, 那就是给定次数. 因为{}是特殊字符, 所以要用\转义下. 而"."如前所述, 匹配任意一个字符. ^表示行首, $表示行尾. 因此^.\{87\}$匹配整句只有87个字符的语句.