如何只获得匹配的字符串部分?

时间:2016-02-09 09:00:34

标签: bash

我知道如何在sed中使用实用程序bashgrep也很好。但是对于输出,它们总是输出包含该模式的行。

bash是否有办法删除包含我想要的模式的特定字符串(使用regexp)?

3 个答案:

答案 0 :(得分:2)

这就是为什么你有grep --help旗帜,$ echo 'hello world' | grep -o hello hello

  

-o , - 仅匹配show 匹配PATTERN的行的部分

现在你可以

sed

使用$ echo "hello world" | sed 's/.*\(hello\).*/\1/'

GNU grep

答案 1 :(得分:1)

使用-o,您可以使用$ echo ab cd ef gh | grep a ab cd ef gh $ echo ab cd ef gh | grep -o a a

  

-o仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上。

示例:

com.microsoft.sqlserver.jdbc.SQLServerException: Connection Failed TCP / IP to localhost port 1433.
Error: "Connection refused: connect. Check the connection properties, make
sure that an instance of SQL Server is running on the host and accepting TCP
/ IP connections to port, and make sure that no firewall is blocking TCP 
connections to port. ".

答案 2 :(得分:0)

通过sed,

$ echo 'hello world' | sed 's/\(hello\)\|./\1/g'
hello

$ echo 'hello world' | sed -r 's/(hello)|./\1/g'
hello