我使用grep在以下两个命令中分别捕获id和名称:
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的批处理文件中执行此操作。
答案 0 :(得分:0)
echo "id=\"12345678_name\">myname</td>" | sed -re 's~id=\"([0-9]+)_name\">([^<]+)</td>~\1, \2~g'
我使用sed
搜索并替换。基本上,搜索字符串是整行,括号中的模式用于我们要提取的位,然后是替换字符串。
搜索:id=\"([0-9]+)_name\">([^<]+)</td>
替换为:\1, \2
\1
是()
中的第一个模式,一个或多个数字。
\2
是()
中的第二种模式,除了<
两种模式都在上下文中,因此会找到正确的文本。但是,此搜索字符串对于上下文非常严格。
答案 1 :(得分:0)
echo 'id=\"12345678_name\">myname</td>' |sed -r 's#id=\\"([[:digit:]]+)[^>]+>([[:alpha:]]+)</td>#\1, \2#g'