从文件中提取正则表达式捕获组的匹配项

BiA*_*AiB 7 regex linux command-line

我想在linux命令行下执行标题命名的操作(几个ca bash脚本也会这样做).我试过的命令是:

sed 's/href="([^"])"/$1/g' page.html > list.lst
Run Code Online (Sandbox Code Playgroud)

但显然它失败了.

确切地说,这是我的意见:

<link rel="stylesheet" type="text/css" href="style/css/colors.css" />
<link rel="stylesheet" type="text/css" href="style/css/global.css" />
<link rel="stylesheet" type="text/css" href="style/css/icons.css" />
Run Code Online (Sandbox Code Playgroud)

我想要的输出是输入文件中所有匹配的逗号分隔或空格分隔列表:

style/css/colors.css,style/css/global.css,style/css/icons.css
Run Code Online (Sandbox Code Playgroud)

我想我得到了正确的表达:href ="([^"]*)"

但我不知道如何执行此操作.sed将进行搜索/替换,这不是我想要的.(相反,我只需要保持匹配并抛弃其余部分,而不是替换它们)

rid*_*rid 7

grep href page.html | sed 's/^.*href="\([^"]*\)".*$/\1/' | xargs | sed 's/ /,/g'
Run Code Online (Sandbox Code Playgroud)

这将提取包含href在其中的所有行,并且只会获得href每行的第一行.另外,请参阅此文章,了解如何使用正则表达式解析HTML.