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'
我正在使用 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'