Bash 如何仅获取字符串的匹配部分?
我知道如何在Bash 如何仅获取字符串的匹配部分?,bash,Bash,我知道如何在bash中使用工具sed,而且grep也很好。但是对于输出,它们总是输出一行包含模式的内容 在bash中是否有方法剪切包含我想要的模式的特定字符串(使用regexp)?这就是为什么您有--help标志,grep--help: -o,--仅匹配仅显示线条匹配图案的一部分 现在你可以 $ echo 'hello world' | grep -o hello hello 使用sed: $ echo "hello world" | sed 's/.*\(hello\).*/\1/' 使用
bash
中使用工具sed
,而且grep
也很好。但是对于输出,它们总是输出一行包含模式的内容
在
bash
中是否有方法剪切包含我想要的模式的特定字符串(使用regexp
)?这就是为什么您有--help
标志,grep--help
:
-o,--仅匹配仅显示线条匹配图案的一部分
现在你可以
$ echo 'hello world' | grep -o hello
hello
使用sed
:
$ echo "hello world" | sed 's/.*\(hello\).*/\1/'
使用
GNU grep
可以使用-o
:
-o仅打印匹配行中匹配的(非空)部分,每个部分在单独的输出行上
例如:
$ echo ab cd ef gh | grep a
ab cd ef gh
$ echo ab cd ef gh | grep -o a
a
通过sed
$ echo 'hello world' | sed 's/\(hello\)\|./\1/g'
hello
$ echo 'hello world' | sed -r 's/(hello)|./\1/g'
hello
grep-o
是您想要的。有没有办法使用sed
来实现这一点?我只是好奇,不是为了某个特定的目标。\1
会影响结果吗?我在sed
手册页面中没有看到任何关于这方面的信息。@Chromium\1
是第一组,即hello
。这是一个正则表达式。那么命令sed's/*\(hello\)./\1/'
的真正含义是什么呢?它并不意味着首先将regexp
转换为组,对吗?