我有一个linux过滤器来从xcode项目中提取包含本地化字符串的所有行,并生成一个排序的唯一条目列表。过滤器工作正常,如下所示。
grep NSLocalized *.m | perl -pe 's/.*NSLocalizedString\((.+?)\,.*/$1/' | sort | uniq
结果是一个看起来像这样的字符串列表
@"string1"
@"string2"
etc
我现在需要做的是识别另一个文本文件中不存在的条目。所以想象我有一个包含;
的文本文件@"string1"
@"string3"
etc
结果将是@"string2"
,因为它不存在于文件
为了参数,该文件名为list.txt
我需要将哪些内容添加到我的过滤器中?我确信我可以用grep做到这一点,但我的大脑失败了!
答案 0 :(得分:7)
一个简单的GREP开关(-v)打印反向。所以命令就是
GREP -v -f filename1 filename2> filename3
答案 1 :(得分:4)
你可以这样做:
grep NSLocalized *.m |
perl -pe 's/.NSLocalizedString((.+?)\,./$1/' |
grep -v -f list.txt | #ONLY ADDITION
sort |
uniq
您将perl
的输出管道传输到grep
正在使用-v
选项反转搜索和-f
选项以从文件中获取搜索模式
答案 2 :(得分:2)
答案 3 :(得分:0)
可能值得制作一个脚本(未经测试):
#!/usr/bin/perl
use strict; use warnings;
my %existing;
while ( <> ) {
chomp;
$existing{ $_ } = 1;
}
my %nonexisting;
while ( defined( my $file = glob '*.m') ) {
open my $h, '<', $file
or die "Cannot open '$file': $!";
while ( my $line = <$h> ) {
if ( my ($string) = $line =~ /NSLocalizedString\((.+?),/ ) {
$existing{ $string } or $nonexisting{ $string } = 1;
}
}
}
print join("\n", sort keys %nonexisting), "\n";
使用以下方式调用它:
$ find_missing list.txt