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