Chinaunix

标题: 匹配首字母大写的两个域【删除首字母大写的人名】 [打印本页]

作者: bryanw    时间: 2010-08-29 18:49
标题: 匹配首字母大写的两个域【删除首字母大写的人名】
大家好,我的需求是删除人名:1. 两个单词;2. 每个单词的首字母大写。
比如以下文件内容,只删除第一行,其他行不删除

Bill Gates
Bill gates
bill Gates
bill gates

我的脚本  echo "Bill Gates" | awk '{ if ( $1 ~ /[^A-Z]/ && $2 ~ /[^A-Z]/ ) print $0 }', 这个脚本哪里有问题呢?谢谢!
作者: bryanw    时间: 2010-08-29 19:05
有朋友帮忙写了一个脚本:

echo "ill Gates" | awk '{if ($1 !~ /^[A-Z]/ || $2 !~ /^[A-Z]/){print $0}}'

这个脚本在三台机器上测试awk:A 3.1.5; B 3.1.5; C 3.1.7
结果是:A上管用,B和C不管用。

不知道这是什么原因造成的。
作者: bbgg1983    时间: 2010-08-29 19:10
  1. suntao@~$ cat a
  2. Bill Gates
  3. Bill gates
  4. bill Gates
  5. bill gates
  6. suntao@~$ sed -r '/^[A-Z][^ ]+ [A-Z][^ ]+/d' a
  7. Bill gates
  8. bill Gates
  9. bill gates
复制代码

作者: bryanw    时间: 2010-08-29 19:18
管用! 谢谢楼上朋友的解答!
作者: bryanw    时间: 2010-08-29 19:20
啊! 好像也不太好...

因为这样的会把其他非两个单词的域都删掉了,比如:
Hello Bill Gates

有办法只删掉只有两个域的、满足条件的行吗?
作者: bbgg1983    时间: 2010-08-29 19:25
改一下就ok了:
  1. sed -r '/^[A-Z][^ ]+ [A-Z][^ ]+$/d'
复制代码

作者: bryanw    时间: 2010-08-29 19:28
这个好!

多谢  bbgg1983 !
作者: jiwang1980    时间: 2010-08-29 19:46
我的机子上 awk域匹配也不管用,好奇怪

[telnet@localhost awk]$ awk --version
GNU Awk 3.1.5
Copyright (C) 1989, 1991-2005 Free Software Foundation.
作者: bbgg1983    时间: 2010-08-29 19:57
回复 8# jiwang1980


    用mawk即可
作者: ly5066113    时间: 2010-08-29 21:01
export LANG=C
awk '...'
作者: bbgg1983    时间: 2010-08-29 21:05
回复 10# ly5066113


    tim,为什么mawk可以,gawk,nawk都不可以呢
作者: ly5066113    时间: 2010-08-29 23:27
回复 11# bbgg1983


这个不清楚了,版本问题吧。
可能不同版本的awk影响它的环境变量不一样。
作者: rdcwayx    时间: 2010-08-30 08:50
  1. awk '$1~/^[A-Z]/&&$2~/^[A-Z]/' infile
复制代码
楼主一楼的  ^ 放到 [ ] 里了,这个应该是问题的根源。
作者: bbgg1983    时间: 2010-08-30 08:53
回复 13# rdcwayx


    这个你试了吗?
作者: rdcwayx    时间: 2010-08-30 08:56
回复  rdcwayx


    这个你试了吗?
bbgg1983 发表于 2010-08-30 08:53
  1. $ awk '$1~/^[A-Z]/&&$2~/^[A-Z]/' infile
  2. Bill Gates

  3. $ awk '$1~/[^A-Z]/&&$2~/[^A-Z]/' infile
  4. Bill Gates
  5. Bill gates
  6. bill Gates
  7. bill gates
复制代码

作者: bbgg1983    时间: 2010-08-30 08:57
看来是和环境有关系~
作者: jiwang1980    时间: 2010-08-30 09:24
回复 9# bbgg1983


    mawk也没有

BTW,10楼tim大神的方法可以




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