使用命令行搜索xcode项目中的所有字符串文字

时间:2017-04-11 04:19:44

标签: xcode bash unix grep

我知道我可以使用command + shift + f来搜索xcode项目,并且我可以选择在“搜索标准栏”中使用正则表达式进行搜索,如here&使用正则表达式(\"[\w\s]+\")在项目中查找字符串文字。但是,我正在尝试在Bash脚本中自动执行此过程。所以我的问题是,如何使用命令行执行类似的搜索,该命令行输出项目中所有字符串文字的列表。我一直在忙着grep而没有取得多大成功。

1 个答案:

答案 0 :(得分:0)

您可以使用

之类的grep命令
grep -o '"[^"\]*\(\\.[^"\]*\)*"' file > outfile

查看online demo

s='"String1 \"here\""
"String2"'
grep -o '"[^"\]*\(\\.[^"\]*\)*"' <<< "$s";

"[^"\]*\(\\.[^"\]*\)*"的POSIX BRE模式匹配",然后匹配\"之外的任何0+字符,然后匹配\的任何0+出现,并且那么任何字符都跟在除\"之外的0+字符之后,再加上"字符。

如果可以使用启用了PCRE的grep,则可以使用更安全的表达式,该表达式仅在第一个未转义的双引号开始匹配:

grep -oP '(?<!\\)(?:\\{2})*\K"[^"\\]*(?:\\.[^"\\]*)*"' file > outfile

在这里,"[^"\\]*(?:\\.[^"\\]*)*"与上面的POSIX BRE模式的PCRE等效,并且(?<!\\)(?:\\{2})*\K确保第一个"不被转义:(?<!\\)匹配一个不带前缀的位置\,然后(?:\\{2})*匹配0个或多个出现的双反斜杠,然后\K忽略到目前为止匹配的文本。

查看online demo

s='A culprit \" escaped quote and "String1 \"here\""
"String2"'
grep -oP '(?<!\\)(?:\\{2})*\K"[^"\\]*(?:\\.[^"\\]*)*"' <<< "$s";

两者都会产生以下输出:

"String1 \"here\""
"String2"