在巨大的html文件中选择两种模式之间的文本?

时间:2014-12-04 08:54:42

标签: grep sh

第1期:只有当grep采用这样的常量模式时,我的代码才有效:

echo "$s" | grep -oP '(?<=class="A3">).*(?=</a>)'

第2期:将输出分配给不起作用的变量

这是我的剧本:

#!/bin/sh

filename="data.txt"
Ptr_ValidChannel="><a title=\"Id: "
Ptr_ChannelNameStart="<class=\"A3\">"
Ptr_ChannelNameEnd="</a>"
while read -r line
do
    case "$line" in
        # working 100%
        #*$Ptr_ValidChannel*) echo "$line" | grep -oP '(?<=class="A3">).*?(?=</a>)' ;; 

        # not working
        #*$Ptr_ValidChannel*) echo $line | grep -oP '(?<=$Ptr_ChannelNameStart).*?(?=$Ptr_ChannelNameEnd)' ;;

        # not working
        *$Ptr_ValidChannel*) myvar=$(echo $line | grep -oP '(?<=$Ptr_ChannelNameStart).*?(?=$Ptr_ChannelNameEnd)') ;; 

    esac

done < "$filename"

echo $var_name

exit

为了简化data.txt内容:

    <TD WIDTH="15%"><a title="Id: I24 NEWS" class="A3">I24 News Français</a><br /><font color="#555555"> <a title="Sporadic or full 16/9 transmission"><img src="/169.gif"></a>

在我的系统中命令:

 ls -la /bin/sh

输出是:

  /bin/sh -> dash
最好的问候。

PS。没有BASH代码请。只有SH。

1 个答案:

答案 0 :(得分:0)

阅读本文后:dash as bin sh.我想出了如何使我的代码正常工作并且更加便携:

#! /bin/sh

filename='data.txt'
Ptr_ValidChannel='><a title="Id: '
Ptr_ChannelNameStart='class="A3">'
Ptr_ChannelNameEnd='</a>'
while read -r line
do
case "$line" in
    *"$Ptr_ValidChannel"*) var_name=$(printf %s "$line" | grep -oP '(?<='"$Ptr_ChannelNameStart"').*?(?='"$Ptr_ChannelNameEnd"')'); printf %s "$var_name"; printf '\n'; ;;
esac

done < "$filename"
exit

感谢您的评论最好的问候。