如何打印直到模式匹配包括模式字符串

How to print till the pattern match including pattern string

我想打印行直到模式匹配但包括模式

例如:

http://google.com/search

我想使用“.com”作为匹配字符串并只打印 http://google.com ,忽略该行的其余部分。

awk 或 grep 会有所帮助。

我尝试了帖子中的代码,但没有得到我想要的代码。

请求你的帮助

使用以下正则表达式:/(.*.com)/

this example

使用grep -o只输出匹配的字符串:

s='http://google.com/search'

grep -o '.*\.com' <<< "$s"
http://google.com

这是一个awk

echo "http://google.com/search" | awk -F/ -vOFS=/ '/\.com/ {$NF="";sub(/\/$/,"");print}'
http://google.com

另一种方法。假设您的目标是获取所有以 .com 结尾的顶级域,那么您可以删除最后的所有内容,包括 .com 并仅将其替换为 .com,即

echo "http://google.com/search
1
2" | awk '/\.com/{sub(/\.com.*/, ".com", [=10=]) ;print [=10=]}'

输出

http://google.com

我添加了额外的输入行以表明仅处理包含 .com 的行。

如果要打印出所有输入行,请删除与 reg-ex 的初始匹配项,即

echo "http://google.com/search
1
2" | awk '{sub(/\.com.*/, ".com", [=12=]) ;print [=12=]}'

输出2

http://google.com
    1
    2

IHTH