Chinaunix

标题: 如何找到包含特殊字符的行,然后删除此行? [打印本页]

作者: unixplus    时间: 2003-05-29 17:04
标题: 如何找到包含特殊字符的行,然后删除此行?
比如我要找到包含/*的注释行,然后删除,怎么做?
我用shell不多,不太会,请各位多帮忙,谢了
作者: nkliyong    时间: 2003-05-29 17:38
标题: 如何找到包含特殊字符的行,然后删除此行?
grep -F -v "/*" filename > newfile

awk '{if($0 ! ~ /\/\*/) {print}}' filename > newfile

sed '/\/\*/d' filename > newfile

偶没试,ni ziji trytry.
作者: deathcult    时间: 2003-05-29 18:58
标题: 如何找到包含特殊字符的行,然后删除此行?
需要编个脚本,因为/* */注释可以跨行。
作者: 红袖添香    时间: 2003-05-30 01:06
标题: 如何找到包含特殊字符的行,然后删除此行?
原帖由 "unixplus" 发表:
比如我要找到包含/*的注释行,然后删除,怎么做?
我用shell不多,不太会,请各位多帮忙,谢了
   

  1. #!/bin/sh

  2. test $# -lt 2 && echo "Usage: $0 [-d] FILE" && exit 1

  3. if [ x"$1" = "x-d" ]; then
  4.     PARA=''
  5.     PRNT='d'
  6.     shift
  7. else
  8.     PARA='-n'
  9.     PRNT='p'
  10. fi

  11. sed $PARA "{
  12. /\/\/.*/p
  13. /\/\*/!b
  14. :a
  15. /\*\//!{
  16. N
  17. ba
  18. }
  19. $PRNT
  20. }" $1
复制代码


使用,假定该脚本命名为 a.sh

1. 只显示注释行:  

$ ./a.sh  file.c
/******************************************************************
* program
* hehe
******************************************************************/
    /* pw = getpwnam(argv[1]);
     enc = crypt( argv[2], pw->pw_passwd );
    */

2. 屏蔽所有注释行

$ ./a.sh -d file.c
#include <pwd.h>
#include <crypt.h>
#include <sys/types.h>
#include <string.h>
#include <stdio.h>

int main ( int argc, char *argv[] ) {
    char *enc;
    struct passwd *pw;
    ...
    }
    exit(0);
}

如果要输出到文件中只要在命令中用 > newfile 就可以了
作者: 红袖添香    时间: 2003-05-30 01:16
标题: 如何找到包含特殊字符的行,然后删除此行?
...

注意:

直接从帖子里拷贝的代码会造成行尾自动加上空格,这样在 sed 会出错,请自行删除这些空格或者在这儿直接下载

http://www.kingisme.com/hongxiu/a.sh
作者: 991214    时间: 2003-05-30 01:48
标题: 如何找到包含特殊字符的行,然后删除此行?
那么如何用cat看html文件呢?!例如:
cat a.html
...
or="#000000" class="unnamed2"><font color="#FFFFFF">主编:丛老师</font></td>
     <td width="6%" bgcolor="#000000">&amp;</td>      <td width="28%" bgcolor="#000000" class="unnamed2"><font color="#FFFFFF">邮箱:<a href="mailto
...
就出现上述的太多无用的东西,而不像看文本一样那么自然...我记得有个软件可以转换,但是用脚本可以作到么?!!
作者: 红袖添香    时间: 2003-05-30 01:58
标题: 如何找到包含特殊字符的行,然后删除此行?
...



$ lynx -dump a.html

就可以了,如果非用脚本也是可以的,用 sed 把 HTML tag 也就是说 <...> 这样的字串去掉就好了,

$ sed 's/\<.*\>//g' a.html

当然版面效果不会有 lynx 那么好。
作者: 991214    时间: 2003-05-30 02:05
标题: 如何找到包含特殊字符的行,然后删除此行?
谢谢红袖姐姐我这就试!
作者: 991214    时间: 2003-05-30 02:11
标题: 如何找到包含特殊字符的行,然后删除此行?
出不来呀!结果:
$cat xmweb|sed 's/\<.*\>//g'
<!>$
注:我的系统是linux.没有装lynx,我想不会是这个原因.
作者: 红袖添香    时间: 2003-05-30 02:21
标题: 如何找到包含特殊字符的行,然后删除此行?
原帖由 "991214" 发表:
出不来呀!结果:
$cat xmweb|sed 's/\<.*\>//g'
<!>$
注:我的系统是linux.没有装lynx,我想不会是这个原因.
   

哦,sorry, 是疏忽啦,

$ sed 's/\<[^>]*\>//g;s/\&nbsp\;/ /g'  a.htm

这只是基本的提取,如果要做得好一点,还有很多东东要考虑的。
作者: 红袖添香    时间: 2003-05-30 02:26
标题: 如何找到包含特殊字符的行,然后删除此行?
....

真晕,这个论坛吃掉了一些东东
作者: 红袖添香    时间: 2003-05-30 02:27
标题: 如何找到包含特殊字符的行,然后删除此行?
....

真晕,这个论坛吃掉了一些东东 , & nbsp; 贴不上

$ sed 's/\<[^>]*\>//g;s/\&nb sp\;/ /g'  a.htm

把笑脸去掉
作者: 991214    时间: 2003-05-30 03:00
标题: 如何找到包含特殊字符的行,然后删除此行?
太谢谢您啦~~,时间不早啦~,祝您晚安~
作者: 红袖添香    时间: 2003-05-30 03:26
标题: 如何找到包含特殊字符的行,然后删除此行?

作者: deathcult    时间: 2003-05-30 11:26
标题: 如何找到包含特殊字符的行,然后删除此行?
:)
可以解析html了。
作者: anonimousboy    时间: 2003-05-31 13:58
标题: 如何找到包含特殊字符的行,然后删除此行?
awk'BEGIN{iCnt = 0;}
       {if($0 ~/\/\*/) iCnt++
         if($0 ~/\*\//) iCnt--
         if(iCnt==0) {print}
       }' urfile > newfile
原帖由 "unixplus" 发表:
比如我要找到包含/*的注释行,然后删除,怎么做?
我用shell不多,不太会,请各位多帮忙,谢了

作者: tanny    时间: 2003-06-02 19:05
标题: 如何找到包含特殊字符的行,然后删除此行?
原帖由 "红袖添香" 发表:
   ?har *enc;
    struct passwd *pw;
    ...
    }
    exit(0);
}

如果要输出到文件中只要在命令中用 > newfile 就可以了


sed用得真神了!
不过一行中既有正文又有注释时也被删掉了:
oraca.orastxtf = 3;              /* always save the SQL statement */




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2