awk - 试图将转义字符作为变量传递给 awk
问题描述
我正在使用这个命令;
awk -v regex1='new[[:blank:]]+File\(' 'BEGIN{print "Regex1 =", regex1}'
这警告我;
awk: warning: escape sequence `\(' treated as plain `(
打印;
new[[:blank:]]+File(
我希望价值是;
new[[:blank:]]+File\(
我尝试修改命令以考虑转义字符,但总是得到相同的警告
解决方案
当你运行时:
$ awk -v regex1='new[[:blank:]]+File\(' 'BEGIN{print "Regex1 =", regex1}'
awk: warning: escape sequence `\(' treated as plain `('
Regex1 = new[[:blank:]]+File(
您在 shell 中将字符串分配给 awk 变量。当您-v
在 awk 中使用时,您是在要求 awk 解释此类分配中的转义序列,以便\t
可以成为文字制表\n
符、换行符等,但是(
在您的字符串中转义时没有特殊含义,因此\(
与(
,因此发出警告消息。
如果您想获得文字\
字符,则需要对其进行转义,以便将其\\
解释为\
:
$ awk -v regex1='new[[:blank:]]+File\\(' 'BEGIN{print "Regex1 =", regex1}'
Regex1 = new[[:blank:]]+File\(
您似乎正在尝试将正则表达式传递给 awk ,并且在我看来,一旦您需要 2 次转义,如果您将目标字符放入括号表达式中,您的代码会更加清晰和简单:
$ awk -v regex1='new[[:blank:]]+File[(]' 'BEGIN{print "Regex1 =", regex1}'
Regex1 = new[[:blank:]]+File[(]
如果您想为 awk 变量分配文字字符串的值而不解释转义序列,那么还有其他方法可以在不使用的情况下这样做-v
,请参阅如何在 awk 脚本中使用 shell 变量?.
推荐阅读
- json - 从 JSON 数组中选择特定值
- php - Magento 产品饲料出口
- xml - 如何将 xml 文件添加到我的解决方案并将文件路径作为字符串获取
- snakemake - 在蛇文件中调用另一个管道会导致丢失输出错误
- c - C中的数组到函数指针。如何使用枚举从数组中选择我想要的元素?
- r - 在 R 中的循环内添加 [[j]] 或在每一行中使用的其他信息
- ms-office - 如何从 PowerPoint 自动打开链接/网址?
- akka - 如何从 ActorContext[T] 创建 ActorSelection
- java - Spring Data Rest:默认时间戳失败,ID 返回 0
- .net - 从子例程返回后,同时 IIS .NET Web 服务调用获取错误的用户上下文