否定前瞻不使用SourceFile

时间:2016-10-13 21:36:02

标签: regex bash macos perl exiftool

我正在尝试使用正则表达式编辑一些文件。

sed似乎太有限了所以我换了Perl。

我的语法可能有问题。

正则表达式模式适用于TextMate。

使用Perl时没有任何反应。

我想删除所有不包含SourceFile""的行。

有关清除exiftools输出数据的信息,请提供您的信息。

$ perl -pe 's/^(?!.*(SourceFile|"").*).*$\n//g' out.csv

$ cat out.csv
SourceFile,GPSLatitude,GPSLongitude
1.jpg,,
2.jpg,,
3.jpg,"10 deg 20' 30.30"" N","40 deg 50' 60.60"" W"
4.jpg,"10 deg 20' 30.30"" N","40 deg 50' 60.60"" W"

清理应该保留第一行和所有包含GPS数据的行。所以在清理后它应该看起来像:

SourceFile,GPSLatitude,GPSLongitude
3.jpg,"10 deg 20' 30.30"" N","40 deg 50' 60.60"" W"
4.jpg,"10 deg 20' 30.30"" N","40 deg 50' 60.60"" W"

1 个答案:

答案 0 :(得分:1)

如果您想删除一行,则无需进行替换。检查条件并显示线条:

[edit]看起来你想要的是你的初始模式所暗示的相反:

perl的:

perl -ne '/SourceFile|""/&&print' file

AWK:

awk '/SourceFile|""/' file

的grep:

grep 'SourceFile\|""' file

[旧答案]

perl -ne '!/SourceFile|""/&&print' file

使用awk缩短:

awk '!/SourceFile|""/' file

或grep:

grep -v 'SourceFile\|""' file