我正在尝试解析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}'
在FS声明中我创建了4个分隔符,它们工作正常,我输出第2和第4个字段。
但是,我实际需要使用的第三个字段分隔符包含awk命令字符,字面意思是:
')">
这样当我将上述陈述改为:
时echo "<td>Here</td> some dynamic text to ignore ')\"> is a string</table>more junk" |
awk -v FS="(<td>|</td>|')\">|</table>)" '{print $2, $4}'
我尝试使用\字符转义违规字符串的一个,全部和每个组合。但是,没有任何工作。
答案 0 :(得分:2)
这可能是您正在寻找的内容:
'foo'bar'
在shell中,始终在单引号中包含字符串(和命令行脚本),除非您需要使用双引号将字符串内容暴露给shell,例如让shell扩展变量。
对于每个shell规则,不能在单引号分隔的字符串'
中包含单引号(不会有任何反斜杠用于转义中间字符串'foo'\''bar'
)所以你需要从单引号中跳回来提供单引号,然后再返回,例如使用\047
或使用八进制转义序列'foo\047bar'
(不要使用十六进制等效项,因为它容易出错),无论您想要单引号,例如)
。然后你需要两次转义override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
setFullScreen(on: fullScreen, animated: animated)
}
override var prefersStatusBarHidden: Bool
{
return fullScreen
}
override var preferredStatusBarStyle: UIStatusBarStyle
{
return .lightContent
}
@IBAction func onToggleNavBarVisibility(_ sender: Any) {
if let navBarHidden = self.navigationController?.isNavigationBarHidden {
// Toggle the state
fullScreen = !navBarHidden
setFullScreen(on: fullScreen, animated: true)
}
}
private func setFullScreen(on : Bool, animated : Bool) {
self.navigationController?.setNavigationBarHidden(on, animated: animated)
self.setNeedsStatusBarAppearanceUpdate()
}
- 一次是因为awk将字符串转换为正则表达式,然后当awk将其用作正则表达式时再次转义。
如果您在字符串周围使用双引号,那么在shell解析字符串时需要一个额外的转义,但是当您用单引号括起字符串时不需要它,因为这会阻塞shell解析字符串。