在文档中找到2个其他字符串之间的字符串

时间:2017-06-10 16:25:17

标签: html awk sed grep between

我发现有很多解决方案可以做我想要的只有一个例外。

我需要搜索.html文档并拉一个字符串。

包含字符串的行将如下所示(1行,无换行符)

<script type="text/javascript">g_initHeader(0);LiveSearch.attach(ge('oh2345v5ks'));var _ = g_items;_[60]={icon:'INV_Chest_Leather_09',name_enus:'Layered Tunic'};_[6076]={icon:'INV_Pants_11',name_enus:'Tapered Pants'};_[3070]={icon:'INV_Misc_Cape_01',name_enus:'Ensign Cloak'};</script>

我需要的文字是

  

INV_CHEST_LEATHER_09

当我使用awk,grep和sed时,我在icon:'和',name _

之间提取数据

问题是,所有这三个脚本扫描整行并使用最后一个',name_因此我最终

  

INV_Chest_Leather_09' ,name_enus:“分层   外套 '}; _ [6076] = {图标:' INV_Pants_11' ,name_enus:'圆锥   裤 '}; _ [3070] = {图标:' INV_Misc_Cape_01

这是我试过的最后一个

  

grep -Po -m 1“(?&lt; =] = {icon:')。*(?=',name _)”

我也试过awk和sed,我真的不喜欢使用哪一个。

所以基本上,我需要搜索整个html文件,找到第一个出现的icon:',在它之后提取文本,直到第一次出现在icon:'of',name _之后。

4 个答案:

答案 0 :(得分:1)

使用GNU awk为第3个arg匹配():

$ awk 'match($0,/icon:\047([^\047]+)/,a){print a[1]}' file
INV_Chest_Leather_09

答案 1 :(得分:0)

正则表达式中的。*是一个贪婪的匹配器,因此模式将匹配到字符串的结尾,然后回溯以匹配name_部分。您可以尝试用[^,] *替换。*(即匹配除逗号之外的任何):

grep -Po -m 1 "(?<=]={icon:')[^,]*(?=',name_)"

答案 2 :(得分:0)

无论如何,我都需要使用sed删除正在生成的空行,所以这是我的最终代码,它将完全按照我想要的结果进行。

cat "index.html" | grep -Po -m1 "(?<=BEGIN)[^,]*(?<=END)" | sed '/^$/d' | head -1

答案 3 :(得分:0)

简单的 perl 方法:

perl -ne 'print "$1\n" if /\bicon:\047([^\047]+)/' file

输出:

INV_Chest_Leather_09