【问题标题】:filtering html tag in linux with sed使用 sed 在 linux 中过滤 html 标签
【发布时间】:2023-04-11 07:15:01
【问题描述】:

我在尝试在 unix 中过滤以下字符串时遇到问题

<option value="20121209/YvegRascYTGxmWLUIrqW/por121209130030.jpg">2012-12-09 13:00h</option>

进入: 20121209/YvegRascYTGxmWLUIrqW/por121209130030.jpg2012-12-09 13:00。 我可以找到我想要的子字符串的开头,但找不到结尾。

 file=tmpfile
 read -r firstline<$file
 firstArg=$(echo $firstline | sed 's/^.*value="//' | sed 's/">*$//')
 echo $firstArg
 secondArg=$(echo $firstline | sed 's/^.*">//' | sed 's/h<*$//')
 echo $secondArg

输出如下:

20121209/YvegRascYTGxmWLUIrqW/por121209130030.jpg">2012-12-09 13:00h</option>
2012-12-09 13:00h</option>

但我真正想要的是

20121209/YvegRascYTGxmWLUIrqW/por121209130030.jpg
2012-12-09 13:00

【问题讨论】:

    标签: unix sed tags sh substitution


    【解决方案1】:

    小修复,您在两个地方缺少.(在每行第二个sed* 之前):

     file=tmpfile
     read -r firstline<$file
     firstArg=$(echo $firstline | sed 's/^.*value="//' | sed 's/">.*$//')
     echo $firstArg
     secondArg=$(echo $firstline | sed 's/^.*">//' | sed 's/h<.*$//')
     echo $secondArg
    

    输入:

    <option value="20121209/YvegRascYTGxmWLUIrqW/por121209130030.jpg">2012-12-09 13:00h</option>
    

    输出:

    20121209/YvegRascYTGxmWLUIrqW/por121209130030.jpg
    2012-12-09 13:00
    

    说明:

    • * 匹配前面的字符 0 次或多次,因此您之前匹配了零次或多次 &gt;&lt;
    • . 匹配任何字符
    • 所以&gt;.* 匹配&gt; 之后的零个或多个字符。

    改进:

    另外,sed 这两条线可以写成:

     firstArg=$(sed 's/^.*value="//;s/">.*$//' <<< "$firstline")
     secondArg=$(sed 's/^.*">//;s/h<.*$//' <<< "$firstline")
    
    • 在一个 sed 调用中通过 ; 分隔多个替换模式
    • &lt;&lt;&lt; 表示法称为herestring,您可以在此处使用它来保存回声和管道
    • 始终用双引号括起变量

    【讨论】:

    • 就是这样。非常感谢。
    【解决方案2】:

    尝试这样做:

    sed -r 's@.*([0-9]{8}/[^"]+).*>([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}[[:alnum:]]*)<.*@\1\n\2@g'
    

    示例

    $ cat file.txt
    <option value="20121209/YvegRascYTGxmWLUIrqW/por121209130030.jpg">2012-12-09 13:00h</option>
    $ sed -r 's@.*([0-9]{8}/[^"]+).*>([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}[[:alnum:]]*)<.*@\1\n\2@g' file.txt
    20121209/YvegRascYTGxmWLUIrqW/por121209130030.jpg
    2012-12-09 13:00h
    

    【讨论】:

    • 这也有效,但出于我的需要,我更喜欢下面的解决方案。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 2017-03-06
    • 2018-07-20
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多