grep或sed - 需要提取特定文本

Jou*_*Man 1 regex shell grep sed

我如何只提取匹配文本的子字符串.

我有一个包含多行的XML文件.然而,这就是我所关注的.

<url>/localhost/index.html</url>
Run Code Online (Sandbox Code Playgroud)

我试过了

cat file.txt | grep -o '<url>.*</url>' 
Run Code Online (Sandbox Code Playgroud)

它给了我整条路线.我只想/localhost/index.html打印.有没有其他我可以使用的选项,就像我在Python中所知,您可以将正则表达式分组到子组中并选择要打印的那个.

Kev*_*vin 6

如果您grep不支持-P(请参阅ruakh的答案),您可以使用sed它:

sed -n 's|.*<url>\(.*\)</url>.*|\1|p'
Run Code Online (Sandbox Code Playgroud)

  • 是的,每当你想要"grep但只打印出部分比赛"时,`sed -n`就是你的朋友.`-n`表示"默认情况下不打印每一行".`s |.*<url> \(.*\)</ url>.*|\1 | p`说"只用<之间的东西替换任何包含'<url> stuff </ url>'的整行url>标签,然后打印该行." 替换不会在不匹配的行上成功,因此只有那些行才能打印,并且只有在完成替换后才能打印. (2认同)