英文:
grep for full raw multi-line string
问题
以下是您要翻译的代码部分:
$ echo ''
- key: val
baz: foo
'' | grep -F "$(
cat <<EOM
- key: val
foo: baz
EOM
)"
输出是部分匹配
- key: val
但如果完全找到给定的heredoc字符串,我想什么都不得到。
是否可以使用grep来查找完整的原始多行字符串(而不是正则表达式)?如果可以,那么应该如何执行?
英文:
This the following
$ echo '
- key: val
baz: foo
' | grep -F "$(
cat <<EOM
- key: val
foo: baz
EOM
)"
The output is a partial match
- key: val
but I would like to get nothing if the whole given heredoc string is fully found and nothing otherwise.
Is it possible to grep for full raw multi-line string (not a regular expression)? If so, then how should it be done?
答案1
得分: 1
以下是您要翻译的内容:
首先,要在grep
中获得精确匹配,您需要使用-x
选项。
然而,正如我最初怀疑的那样,即使是完全匹配,grep -x
也会由于存在换行符而失败。
一个技巧是使用tr
从原始和模式字符串中去除所有换行符,并像这样使用-x
:
echo '
- key: val
baz: foo
' | tr -d '\n' | grep -q -xF -- "$(
cat <<EOM | tr -d '\n'
- key: val
foo: baz
EOM
)" && echo "match" || echo "nope"
echo '
- key: val
baz: foo
' | tr -d '\n' | grep -q -xF -- "$(
cat <<EOM | tr -d '\n'
- key: val
baz: foo
EOM
)" && echo "match" || echo "nope"
输出:
nope
match
请注意使用-q
来抑制grep
的正常输出,并仅使用退出代码。还使用了--
来分隔选项和模式。
英文:
First thing is that to get exact match in grep
you will need to use -x
option.
However, as I suspected initially grep -x
will fail for even the full match due to presence of line breaks.
One trick is to use tr
to strip all line breaks from original and pattern strings and use -x
like this:
echo '
- key: val
baz: foo
' | tr -d '\n' | grep -q -xF -- "$(
cat <<EOM | tr -d '\n'
- key: val
foo: baz
EOM
)" && echo "match" || echo "nope"
echo '
- key: val
baz: foo
' | tr -d '\n' | grep -q -xF -- "$(
cat <<EOM | tr -d '\n'
- key: val
baz: foo
EOM
)" && echo "match" || echo "nope"
Output:
nope
match
Note use of -q
to suppress normal output of grep
and use only the exit code. Also used --
to separate options from pattern.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论