使用egrep在代码中查找更多新行?

时间:2015-12-17 21:25:30

标签: regex bash grep

如何使用正则表达式在}之前的代码中找到多个换行符并向其添加警告?这就是我在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/"

2 个答案:

答案 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
  }" {} \;