首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk -v var=$var /var/未按预期工作

awk -v var=$var /var/未按预期工作
EN

Ask Ubuntu用户
提问于 2021-01-12 02:49:18
回答 1查看 110关注 0票数 0

档案部分:

代码语言:javascript
复制
代码语言:javascript
复制
awk '/\/' RS='\' file

虽然格式可能不正确,但会产生预期的结果:

代码语言:javascript
复制

(我想要整个块,包括,但可以按原样工作),

代码语言:javascript
复制
echo $TPNum
"P16"
awk -v TPNum=$TPNum '/\/' RS='\' file

除了相同的警告:awk: warning: escape sequence `\<' treated as plain `<' awk: warning: escape sequence `\>' treated as plain `>'之外,不会产生任何结果。我以前在awk中使用过变量,没有问题。请问我在这里少了什么?

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2021-01-12 03:24:53

如果您的文件是HTML或XML,那么您应该考虑使用为标记语言设计的工具。

但是,如果必须使用awk,那么AFAIK就不能在regexp常量/.../中使用变量。但是,您可以使用GNU用户指南所指的动态正则表达式或计算的正则表达式 --基本上是一个字符串表达式,您可以在~比较的RHS上使用它。所以:

代码语言:javascript
复制
$ TPNum='"P16"'

$ awk -v TPNum="$TPNum" '
    $0 ~ "\\

反斜杠需要在动态正则表达式中转义,因为字符串被扫描了两次:

如果对字符串进行两次扫描,会有什么不同?答案与转义序列有关,特别是反斜杠。要将反斜杠输入到字符串中的正则表达式中,必须键入两个反斜杠。

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1307227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档