Awk 字段分隔符无法分隔命令字符

Awk 字段分隔符无法分隔命令字符,awk,Awk,我正在尝试解析html源代码。在我的例子中,我只是重复它。但是,我实际上是从一个文件中读取html 下面是一些语法上有效的代码: echo "<td>Here</td> some dynamic text to ignore <garbage> is a string</table>more junk" | awk -v FS="(<td>|</td>|<garbage>|</table>)" '{p

我正在尝试解析html源代码。在我的例子中,我只是重复它。但是,我实际上是从一个文件中读取html

下面是一些语法上有效的代码:

echo "<td>Here</td> some dynamic text to ignore <garbage> is a string</table>more junk" |
awk -v FS="(<td>|</td>|<garbage>|</table>)" '{print $2, $4}'
因此,当我将上述声明更改为:

echo "<td>Here</td> some dynamic text to ignore ')\"> is a string</table>more junk" |
awk -v FS="(<td>|</td>|')\">|</table>)" '{print $2, $4}'
echo“这里有一些要忽略的动态文本”)\“>是stringmore垃圾”|
awk-v FS=“(| |')\”>|)“{print$2,$4}”

我已经尝试用\字符转义一个、所有和每个有问题的字符串组合。但是,什么都不起作用。

这可能就是您正在寻找的:

$ echo "<td>Here</td> some dynamic text to ignore ')\"> is a string</table>more junk" |
awk -v FS='(<td>|</td>|\047\\)">|</table>)' '{print $2, $4}'
Here  is a string
$echo“这里有一些要忽略的动态文本“\”>是stringmore垃圾”|
awk-vfs='(| |\047\\)“>|”)“{打印$2,$4}”
这是一根绳子
在shell中,除非需要使用双引号将字符串内容公开给shell,例如让shell展开变量,否则始终在单引号中包含字符串(和命令行脚本)

根据shell规则,您不能在单引号分隔的字符串
'foo'bar'
中包含单引号(大量反斜杠将无法转义该中间字符串
'
),因此您需要跳出单引号以提供单引号,然后返回,例如,使用
'foo'\'bar'
或使用八进制转义序列
\047
(不要使用十六进制等价物,因为它容易出错),只要你想要一个单引号,例如
'foo\047bar'
。然后需要两次转义
,一次用于awk将字符串转换为regexp,另一次用于awk将其用作regexp


如果在字符串周围使用双引号,则在shell解析字符串时需要另外一个转义,但在将字符串用单引号括起来时则不需要这样做,因为这样会阻止shell解析字符串。

这可能就是您要找的:

$ echo "<td>Here</td> some dynamic text to ignore ')\"> is a string</table>more junk" |
awk -v FS='(<td>|</td>|\047\\)">|</table>)' '{print $2, $4}'
Here  is a string
$echo“这里有一些要忽略的动态文本“\”>是stringmore垃圾”|
awk-vfs='(| |\047\\)“>|”)“{打印$2,$4}”
这是一根绳子
在shell中,除非需要使用双引号将字符串内容公开给shell,例如让shell展开变量,否则始终在单引号中包含字符串(和命令行脚本)

根据shell规则,您不能在单引号分隔的字符串
'foo'bar'
中包含单引号(大量反斜杠将无法转义该中间字符串
'
),因此您需要跳出单引号以提供单引号,然后返回,例如,使用
'foo'\'bar'
或使用八进制转义序列
\047
(不要使用十六进制等价物,因为它容易出错),只要你想要一个单引号,例如
'foo\047bar'
。然后需要两次转义
,一次用于awk将字符串转换为regexp,另一次用于awk将其用作regexp


如果在字符串周围使用双引号,则在shell解析字符串时需要另外一个转义,但在将字符串用单引号括起来时则不需要这样做,因为这会阻止shell解析字符串。

命令的预期输出是什么?代码的第一位@Ed Morton返回预期的输出。第二种情况并非如此。已将您的其他答复标记为解决方案。谢谢。好的,但下一次-在您的问题中实际显示预期的输出。命令中不起作用的预期输出是什么?@Ed Morton第一位代码返回预期的输出。第二种情况并非如此。已将您的其他答复标记为解决方案。谢谢。好的,但下次-在你的问题中实际显示预期的输出。就这样。谢谢在FS声明周围使用双引号而不是单引号,以及在撇号处使用八进制代码的组合。谢谢,就这样。谢谢在FS声明周围使用双引号而不是单引号,以及在撇号处使用八进制代码的组合。谢谢