sed 或 grep 中的两个匹配项

Two matches in sed or grep

我正在使用 grep 在以下两个命令中分别捕获 id 和 name:

echo "id=\"12345678_name\">myname</td>" | grep -oP "(?<=id=\).*?(?=_name)"
echo "id=\"12345678_name\">myname</td>" | grep -oP "(?<=name).*?(?=<\/td)"

如何在一个 grep 或 sed 命令中完成所有操作?我需要以下输出:

12345678, myname

我在 Windows (6.2.9200) 中使用 GNU Sed 4.2.1 版在命令行和批处理文件中执行此操作。

echo "id=\"12345678_name\">myname</td>" | sed -re 's~id=\"([0-9]+)_name\">([^<]+)</td>~, ~g'

我使用了 sed 搜索和替换。基本上,搜索字符串是我们要提取的位在括号中带有模式的整行,然后是替换字符串。

搜索:id=\"([0-9]+)_name\">([^<]+)</td>

替换为:,

</code> 是 <code>() 中的第一个模式,一个或多个数字。

</code> 是 <code>() 中的第二个模式,除了 <

两种模式都在上下文中,因此会找到正确的文本。然而,这个搜索字符串对上下文非常严格。

echo 'id=\"12345678_name\">myname</td>' |sed -r 's#id=\"([[:digit:]]+)[^>]+>([[:alpha:]]+)</td>#, #g'