2012-09-14 219 views
1

我试图改变版权的资料库,我的意思是改变旧的版权的新著作权例如版权2008- 2012年版权,UNIX - 在grep命令需要帮助

所以我想要做的是发现,

  1. 有多少个文件2个著作权
  2. 多少个文件没有在他们的任何版权
  3. 许多文件如何有单一的,老的版权在他们

我能够通过使用grep -vir copyright *实现 问题2,利用grep -rni copyright *

问题3我如何列出所有与他们2对版权的文件吗?

+1

有关于SO关闭shell编程问题没有很好的理由; shell编程在这里是主题。 –

回答

0

使用uniq-c标志。即grep copyright * | uniq -c | egrep -v '^1'

2

推测3,4或更多版权与2一样麻烦?

您可以使用grep来算,然后再筛选出的1计数:

grep -irc copyright * | grep -v '^ *1 ' 
0

使用xargs获得的版权行数的所有文件:

ls * | xargs -I % sh -c "echo %; grep -c 'copyright' %" 
+1

我们可以再讨论为什么处理'ls'的输出是危险的;现在,让我们假设它是确定的。但是,这是一个复杂的方式。你可以简单地写'grep -c copyright/dev/null *'(这可以避免'ls'的问题)。 '/ dev/null'确保打印文件名(但是'/ dev/null'不会显示在输出中,因为它不包含版权声明)。 IOW不需要使用'xargs',也不需要多次调用'grep'(除非你的文件夹包含很多你不能安全使用'*'的文件,但是这个问题显然意味着这不是问题)。 –

+0

@JonathanLeffler其实,'grep -c copyright *'工作得很好。 'grep -c copyright/dev/null *'也为'/ dev/null'打印一行(当然是0),至少在我使用的'bash'中。我同意'xargs'在这里是完全不必要的,我的心灵一定是在流浪...... – nrz

+1

'grep -c copyright *'如果有多个文件需要处理,如果只有一个文件,其名称将不会显示。 '/ dev/null'技巧(可以用'xargs'也可以很好地发挥作用)确保命令行中至少有两个文件,所以名称被回显。 –