当我尝试在我的代码中找到警告或错误的来源时,编译器的输出经常被预处理,这样白色空间就不再像原始代码那样。
使用白色空格转换grep
模式的好方法是什么:
grep 'data.frame(foo = x)' mycode
到
grep 'data.frame(foo *= *x)' mycode
?
一种可能性,我觉得有点难看:
PATTERN=`sed 's/ / */g' <(echo "test pattern") ` && grep $PATTERN mycode
答案 0 :(得分:1)
怎么样
PATTERN=$(sed -r 's/\s+/\\s+/g' <<<"$PATTERN")
然后使用egrep
允许使用扩展的正则表达式功能\s
作为空格。
或者一步到位:
egrep "$(sed -r 's/\s+/\\s+/g' <<<"$PATTERN")" mycode
答案 1 :(得分:1)
而不是:
grep 'data.frame(foo = x)' mycode
使用:
mygrep 'data.frame(foo = x)' mycode
其中mygrep
是一个文件,其可执行位设置为:
#!/bin/bash
declare -a options
for arg in "$@"
do
case "$arg" in
-*) options+=("$arg") ; shift ;;
*) break ;;
esac
done
grep "${options[@]}" "$(sed 's/ / */g' <(echo "$1"))" "$2"
所有丑陋都隐藏在文件中。论点是一样的。 (限制:我没有添加处理选项的能力,这些选项接受选项及其参数由空格分隔的特殊情况的参数。)