Bash grep搜索所有空白零次或多次

Bash grep搜索所有空白零次或多次,bash,shell,grep,Bash,Shell,Grep,当我试图在代码中查找警告或错误的来源时,编译器的输出通常是经过预处理的,因此空格不再与原始代码中的空格相同 下面是一种很好的方法,可以用空格来转换grep模式: grep 'data.frame(foo = x)' mycode 到 ? 有一种可能性,我觉得有点难看: PATTERN=`sed 's/ / */g' <(echo "test pattern") ` && grep $PATTERN mycode PATTERN=`sed's//*/g'怎么样 PATT

当我试图在代码中查找警告或错误的来源时,编译器的输出通常是经过预处理的,因此空格不再与原始代码中的空格相同

下面是一种很好的方法,可以用空格来转换
grep
模式:

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

?


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

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

PATTERN=$(sed -r 's/\s+/\\s+/g' <<<"$PATTERN")
而不是:

grep '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"
#/bin/bash
声明-a选项
对于“$@”中的arg
做
中的大小写“$arg”
-*)选项+=(“$arg”);移位;;
*)打破;;
以撒
完成

grep“${options[@]}”$(sed's//*/g'如果丑陋是个问题,为什么不把它隐藏在一个脚本中,这样你就不用看了?或者,你想解决另一个问题吗?我不喜欢脚本解决方案的唯一原因是我必须找出哪一个参数是模式。我认为没有简单的方法可以解决?shell脚本会找出哪个参数是模式,哪个文件是与
grep
相同的。我在下面基于
sed
代码添加了一个示例。我遇到的问题是当我使用选项,或者
-e
作为模式时,我想检测它。好的。已经添加了处理选项的功能。这很好。我替换了
>当提供更多的文件时,“$2”
${*:2}
一起。此外,我转义了一些特殊的regexp字符(现在是
[
]
),它们也出现在代码中:
模式=“$(sed's/*/g;s/\[/\\\[/g;s/\]/\\]/\]/g'
grep 'data.frame(foo = x)' mycode
mygrep  'data.frame(foo = x)' mycode
#!/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"