Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用sed或awk基于列值从html文件中提取特定行_Regex_Shell_Unix_Awk_Sed - Fatal编程技术网

Regex 使用sed或awk基于列值从html文件中提取特定行

Regex 使用sed或awk基于列值从html文件中提取特定行,regex,shell,unix,awk,sed,Regex,Shell,Unix,Awk,Sed,我有一个html文件,其中一个表有许多行。TR标记可能在另一行中有其相应的/TR。例如.html文件有以下内容 <TABLE BORDER=1><TR><TH>col1</TH><TH>col2</TH><TH>col3</TH><TH>col4</TH></TR><TR><TD>aaa</TD><TD>bbb<

我有一个html文件,其中一个表有许多行。TR标记可能在另一行中有其相应的/TR。例如.html文件有以下内容

<TABLE BORDER=1><TR><TH>col1</TH><TH>col2</TH><TH>col3</TH><TH>col4</TH></TR><TR><TD>aaa</TD><TD>bbb</TD><TD>ccc</TD><TD>ddd</TD></TR><TR><TD>eee</TD><TD>fff</TD><TD>ccc</TD><TD>mmm</TD></TR><TR><TD>jjj</TD><TD>kkk</TD><TD>lll</TD><TD>ssss</TD></TR>.........</TABLE>
col1col2col3col4aaabbbccccddedeefffcccmmjjkkkllssss。。。。。。。。。
现在,我需要根据在tr和/tr之间找到的td值,将tr和/tr标记(包括)之间的内容提取到另一个html文件中

例如,从a.html文件中,我需要创建b.html,它只包含第三列值为“ccc”的行,前提是a.html保持不变

<TR><TD>aaa</TD><TD>bbb</TD><TD>ccc</TD><TD>ddd</TD></TR><TR><TD>eee</TD><TD>fff</TD><TD>ccc</TD><TD>mmm</TD></TR>
aaabbbccdddeeffcccmmm
我是新手,对sed和awk只有一点了解。
有谁能帮我完成这项工作,或者建议一种更好的方法,以便轻松完成这项工作。

使用Python和BeautifulSoup,以一种更结构化、更健壮的方式完成这项工作:-sed和awk都不能解析HTML,您也可以使用能够解析HTML的方法

这里有一个工作程序(熊猫在里面使用了BeautifulSoup,它帮助我满足了你不需要“for”循环的愿望):


使用Python和BeautifulSoup以一种更加结构化和健壮的方式来实现这一点:-sed和awk实际上都不能解析HTML,您也可以使用一些可以解析HTML的东西

这里有一个工作程序(熊猫在里面使用了BeautifulSoup,它帮助我满足了你不需要“for”循环的愿望):


使用合适的解析器。例如,一个围绕Perl的包装器,它又是围绕以下内容的包装器:


使用合适的解析器。例如,一个围绕Perl的包装器,它又是围绕以下内容的包装器:


首先,我在每一行后面添加了新行

os.system(“sed's//&\\\\\n/g'/tmp/file\u full.html>/tmp/file\u formatted.html”)
然后执行下面一行我们得到结果。这一行检查列值是否为“ccc”,如果是,则将其写入一个单独的文件中

os.system('sed -n "/<TD>ccc<\/TD>/p" /tmp/file_formated.html > /tmp/file_ccc.html')
os.system('sed-n”/ccc/p”/tmp/file\u formatted.html>/tmp/file\u ccc.html'))

首先,我在每个

os.system(“sed's//&\\\\\n/g'/tmp/file\u full.html>/tmp/file\u formatted.html”)
然后执行下面一行我们得到结果。这一行检查列值是否为“ccc”,如果是,则将其写入一个单独的文件中

os.system('sed -n "/<TD>ccc<\/TD>/p" /tmp/file_formated.html > /tmp/file_ccc.html')
os.system('sed-n”/ccc/p”/tmp/file\u formatted.html>/tmp/file\u ccc.html'))

:出于性能原因,我试图避免在python脚本中使用for循环,而且我需要使用另一个php脚本在bowser中显示此输出文件。那么,通过sed或awk命令使用模式匹配,这是不可能的吗?性能原因?你一定是在开玩笑吧?你的输入有多大?这个html文件将从一个包含数千条记录的mysql表生成。所以我不想使用for循环。可能还有其他选择吗?它甚至意味着什么“我不想使用for循环”。你手边有量子计算机吗?@JohnZwinck我认为导入是非法的!!:出于性能原因,我试图避免在python脚本中使用for循环,而且我需要使用另一个php脚本在bowser中显示此输出文件。那么,通过sed或awk命令使用模式匹配,这是不可能的吗?性能原因?你一定是在开玩笑吧?你的输入有多大?这个html文件将从一个包含数千条记录的mysql表生成。所以我不想使用for循环。可能还有其他选择吗?它甚至意味着什么“我不想使用for循环”。你手边有量子计算机吗?@JohnZwinck我认为导入是非法的!!使用正则表达式无法做到这一点,想象下一个:
读取。使用regex无法可靠地执行此操作,想象下一个:
读。昨天:)@TomFenech:我的错。谢谢。昨天:)@TomFenech:我的错。谢谢
 os.system("sed 's/<\/TR>/&\\\n/g' /tmp/file_full.html > /tmp/file_formated.html")
os.system('sed -n "/<TD>ccc<\/TD>/p" /tmp/file_formated.html > /tmp/file_ccc.html')