Bash 如何仅将我给出的单词作为变量进行grep?
我想让格雷普在我的档案里写一个字,但只写我给格雷普的那部分 示例:在我的文件中,我有“hell\nhell:o”,我想要grep hell,但不是hello。Bash 如何仅将我给出的单词作为变量进行grep?,bash,Bash,我想让格雷普在我的档案里写一个字,但只写我给格雷普的那部分 示例:在我的文件中,我有“hell\nhell:o”,我想要grep hell,但不是hello。 我如何才能做到这一点?使用grep的-o选项: grep -o hell your_file 从grep手册页面: -o、 --仅匹配 仅打印匹配行中匹配的(非空)部分,每个部分在单独的输出行上 尝试使用-oP echo "hell hello" | grep -oP '\bhell\b' 尝试一下: grep -E "\bhell
我如何才能做到这一点?使用grep的-o选项:
grep -o hell your_file
从grep手册页面:
-o、 --仅匹配
仅打印匹配行中匹配的(非空)部分,每个部分在单独的输出行上
尝试使用
-oP
echo "hell hello" | grep -oP '\bhell\b'
尝试一下:
grep -E "\bhell(\s|$)" file
如果只需要匹配的单词,请添加o
:
kent$ echo "hell\nhell:o"|grep -oE "\bhell(\s|$)"
hell
或:
您的问题(和评论)不太清楚,但您可以尝试以下任一方法:
- “消极前瞻”
- 使用“线端锚点”
消极前瞻 以下正则表达式将匹配任何未后跟
的hell
:
(根据需要进行调整):
grep
不支持此功能,因此您需要使用perl
或其他工具:
echo -e "hell\nhell:o" \
| perl -ne 'print if /hell(?!:)/'
端锚
以下内容适用于grep
,仅在hell
接触到行尾($
)时匹配:
echo-e“地狱\n地狱:o”\
|grep'hell$'
像这样:?我的错,我的问题措辞错误,事实上在我的文件中我有“hell\nhell:o”,我只想要grep hell谢谢。好吧,你可以按照你提到的编辑你的问题。你知道,没有人会看这些评论来澄清问题的主体。@Wizz欢迎来到StackOverflow。您可能希望在问题本身中包含可能的边缘情况。我的一些问题:你如何区分第一个“地狱”和第二个“地狱”?字母数字字符\b字?非印刷品?空白?(否则,vahdet的发现似乎是一个合适的解决方案。)您尝试了什么,为什么不起作用?所以您希望匹配hell
,但不匹配hell:o
。。。那你好
或地狱o
或地狱b
等呢?我已经试过了,但它让我痛苦万分,我只需要他给我痛苦
hell(?!:)
echo -e "hell\nhell:o" \
| perl -ne 'print if /hell(?!:)/'
hell$