如何使用正则表达式在}
之前的代码中找到多个换行符并向其添加警告?这就是我在xcode中添加bash脚本的尝试:
TAGS2="\}/\n"
echo "searching ${SRCROOT} for ${TAGS2}"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" \) -print0 | xargs -0
egrep --with-filename --line-number --only-matching "($TAGS2).*\$" |
perl -p -e "s/($TAGS2)/ warning\$1/"
答案 0 :(得分:0)
如果您希望在文件中找到第一个非空白字符为} 的行之前有空白行的位置,请执行以下awk
程序可能有所帮助。
awk '/\S/ { blanks = NR - prev - 1; prev = NR }
blanks && /^\s*}/ { printf "%d: WARNING: Useless blank line\n", NR - 1 }'
这将与Gnu awk合作;使用更多与Posix兼容的awks,您需要使用/[^ \t]/
和/^[ \t]*}/
(或类似的东西)代替给定的模式。
egrep
是一个很棒的工具,但它可以逐行匹配。它无法识别多行模式,也无法更改行分隔符。
答案 1 :(得分:0)
egrep不适用于多行。 您可以使用 sed (或上一个答案中提到的awk)而不是“egrep”。无需使用perl。请参阅下面的脚本。
TAGS2="}"
echo "searching ${SRCROOT} for ${TAGS2}"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" \) \
-print -exec sed "/$TAGS2/{ # search for tag
=; # print line number
N; # join with next line
s/$TAGS2/warning/; # substitute tags found with warning
}" {} \;