需要帮助扫描文本文件,找到两个模式之间的所有文字。比如,如果我们有一个。sql文件,需要扫描并找到from和where之间的所有单词。Grep一次只能扫描一行。对于这个需求,最好的unix脚本是什么?sed,awk有这些特性吗?指出任何例子都是非常感谢的。
Sed有以下内容:
sed -n -e '/from/,/where/ p' file.sql
打印带有from
的行和带有where
的行之间的所有行。
对于可以包括同时具有from和where的行的内容:
#!/bin/sed -nf
/from.*where/ {
s/.*\(from.*where\).*/\1/p
d
}
/from/ {
: next
N
/where/ {
s/^[^\n]*\(from.*where\)[^\n]*/\1/p
d
}
$! b next
}
这(作为sed脚本编写)稍微复杂一些,我将尝试解释细节。
第一行在同时包含from
和where
的行上执行。如果一行匹配该模式,则执行两个命令。我们使用s
substitute命令只提取from和where之间的部分(包括from和where)。该命令中的p
后缀将打印该行。delete命令清除模式空间(工作缓冲区),加载下一行并重新启动脚本。
当找到包含from
的行时,第二个命令开始执行一系列命令(按大括号分组)。基本上,这些命令形成了一个循环,它将不断地从输入向模式空间追加行,直到找到带有的
的行,或者直到我们到达最后一行。
当在中找到
时,我们可以打印模式空间的内容,但首先我们必须使用substitute命令清除它。它与前面使用的类似,但是我们现在将前导和尾随的.*
替换为[^\n]*
,这告诉sed只匹配非换行字符,有效地匹配第一行中的from和最后一行中的where。然后,d
命令清除模式空间,并在下一行重新启动脚本。
b
命令将跳转到一个标签,在本例中是标签next
。但是,$!
地址表示它不应该在最后一行执行,从而允许我们离开循环。当以这种方式离开循环时,我们没有找到相应的在
中的位置,因此您可能不想打印它。
但是请注意,这也有一些缺点。以下情况将不按预期处理:
from ... where ... from
from ... from
where
from
where ... where
from
from
where
where
我们希望您能够帮助我们解决以下问题: 给出了一个可能包含圈的有向图。必须找到一组满足以下标准的路径: 在从节点A到节点B的过程中可以通过的所有边必须被集合内的路径覆盖(一条边可以是集合中多条路径的一部分) 解决方案不必是路径数最少的解决方案,路径也不必是最短的。然而,该解决方案应该可以像java一样使用编程语言高效地实现。我们需要解决方案来生成几个测试用例,覆盖节点a和节点B之间的所有边很重要。
我必须用下面的长字符串。如何提取介于“url=”和“,”之间的所有值,以便获得以下数组? 我尝试了以下方法,但它只给我第一次出现,但我需要它们。谢谢!
这里的练习是:我需要编写一个递归方法,它可以得到N*N大小的正整数矩阵,起始单元格行和列索引以及结束单元格行和列索引,并且该方法需要返回从起始单元格到结束单元格的可能路径数,这些约束条件是:a.你可以从当前位置移动到左单元格、右单元格、上单元格或下单元格。b.你不能越过主对角线,但是你可以转到对角线上的单元格(但不能越过它)。路由中的每个单元格只出现一次。d.矩阵需要像原始矩阵一样,末尾有原始单元
问题内容: 在中,我想找到标记以及两者之间的所有内容,如下所示: 我想找到标记以及之间的所有内容,然后将其删除。 标签之间的所有内容都是变量,但是我想在获得时删除整个标签和子标签。 有人知道该怎么做吗? 问题答案: 使用正则表达式进行HTML / XML解析不是一个好主意… 但是,如果仍然要执行此操作,请搜索正则表达式模式 并将其替换为空字符串…
我正在使用DocX库来替换word文档中的文本。我想以某种方式找到模板docx文件中“[]”之间的所有字符串,例如[Name]、[LastName]、[Date]等...并将其替换为我以前加载到datagridview中具有相同列名(name、LastName、Date)的值。以下是我目前掌握的信息:
问题内容: 如何使用PHP查找两个日期之间的天数? 问题答案: