grep搜索所有空格零次或多次

时间:2014-01-08 22:14:01

标签: bash shell grep

当我尝试在我的代码中找到警告或错误的来源时,编译器的输出经常被预处理,这样白色空间就不再像原始代码那样。

使用白色空格转换grep模式的好方法是什么:

grep 'data.frame(foo = x)' mycode

grep 'data.frame(foo *= *x)' mycode


一种可能性,我觉得有点难看:

PATTERN=`sed 's/ / */g' <(echo "test pattern") ` && grep $PATTERN mycode

2 个答案:

答案 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"

所有丑陋都隐藏在文件中。论点是一样的。 (限制:我没有添加处理选项的能力,这些选项接受选项及其参数由空格分隔的特殊情况的参数。)