- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,我正在尝试使用 awk 命令找到正则表达式后打印 5 行。我有以下内容:
line_start=$(awk '/regex/{print NR}' file)
let line_end=$line_start+4
awk 'NR==$line_start, NR==$line_end' file
这不会打印任何内容。它不会挂起,只是转到下一行。
我研究了一些类似的问题,并看到人们使用 -v 选项。我应该在这里使用它吗,他们的情况是针对更大的 awk 脚本。
顺便说一句,我正在使用 Kornshell
谢谢!
最佳答案
您的脚本存在几个问题。直接的问题是,在第二次调用 awk 时,您在脚本周围使用单引号,因此 $line_start
和 $line_end
不是变量由 shell 扩展,而是将它们作为脚本的一部分逐字传递给 awk。您可以使用双引号来解决此问题。
awk "NR==$line_start, NR==$line_end" file
这只有效,因为 $line_start
和 $line_end
是数字。如果它们是字符串,则无法执行此操作,因为 shell 变量的值最终会被 awk 解析为 awk 代码的一部分,而不是字符串。一般来说,要将字符串传递给 awk 脚本,您可以使用 -v
习惯用法来定义与 shell 变量同名的 awk 变量(如果您愿意,也可以使用不同的名称):
awk -v "line_start=$line_start" -v "line_end=$line_end" 'NR==line_start, NR==line_end' file
您的脚本还有更多问题。
/regex/
存在多个匹配项,则 $line_start
将包含行号列表。 shell 会提示 let
行上存在语法错误。如果您想在匹配后显示 5 行,请在 awk 中进行计数。
awk '
/regex/ { show_lines = 5 }
show_lines { print; --show_lines; }
' file
如果您只想显示第一个匹配 block ,请在 show_lines
达到 0 后退出。
show_lines { print; --show_lines; if (!show_lines) exit; }
关于shell - 在 AWK 命令中将变量传递给 NR 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12218609/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!