【问题标题】:sed/awk/cut/grep - Best way to extract stringsed/awk/cut/grep - 提取字符串的最佳方法
【发布时间】:2013-03-01 18:49:51
【问题描述】:

我有一个采用这种格式的 results.txt 文件:

Uncharted 3: Javithaxx l Rampant l Graveyard l Team Deathmatch HD (D1VpWBaxR8c)
Matt Darey feat. Kate Louise Smith - See The Sun (Toby Hedges Remix) (EQHdC_gGnA0)
The Matrix State (SXP06Oax70o)
Above & Beyond - Group Therapy Radio 014 (guest Lange) (2013-02-08) (8aOdRACuXiU)

我想创建一个新文件,提取在每行“8aOdRACuXiU”行的最后一个字符中指定的 youtube URL ID

我正在尝试在新文件中构建这样的 URL: http://www.youtube.com/watch?v=8aOdRACuXiU&hd=1

注意,我将 &hd=1 附加到要替换的字符串中。我曾尝试使用 Linux reverse and cut 但 reverse 或 rev munges 我的数据。这里最困难的部分是我的文本文件中的每一行都有带括号的条目,我只关心获取最后一组括号之间的数据。每行都有可变长度,因此这也无济于事。在行尾使用 grep 和 .$ 怎么样?

总而言之,我想从 results.txt 中提取 youtube ID 并将其导出为以下格式的新文件:http://www.youtube.com/watch?v=8aOdRACuXiU&hd=1

【问题讨论】:

    标签: sed awk grep cut


    【解决方案1】:
    $ sed 's!.*(\(.*\))!http://www.youtube.com/watch?v=\1\&hd=1!' results.txt 
    http://www.youtube.com/watch?v=D1VpWBaxR8c&hd=1
    http://www.youtube.com/watch?v=EQHdC_gGnA0&hd=1
    http://www.youtube.com/watch?v=SXP06Oax70o&hd=1
    http://www.youtube.com/watch?v=8aOdRACuXiU&hd=1
    

    在这里,.*(\(.*\)) 查找最后出现的一对括号,并捕获这些括号内的字符。然后使用\1 将捕获的组插入到 URL 中。

    【讨论】:

      【解决方案2】:

      使用awk

      awk '{ 
        v = substr( $NF, 2, length( $NF ) - 2 )
        printf "%s%s%s\n", "http://www.youtube.com/watch?v=", v, "&hd=1" 
      }' infile
      

      它产生:

      http://www.youtube.com/watch?v=D1VpWBaxR8c&hd=1
      http://www.youtube.com/watch?v=EQHdC_gGnA0&hd=1
      http://www.youtube.com/watch?v=SXP06Oax70o&hd=1
      http://www.youtube.com/watch?v=8aOdRACuXiU&hd=1
      

      【讨论】:

        【解决方案3】:

        使用 单行:

        perl -lne 'printf "http://www.youtube.com/watch?v=%s&hd=1\n", $& if /[^\(]+(?=\)$)/' file.txt
        

        或多行版本:

        perl -lne '
            printf(
                "http://www.youtube.com/watch?v=%s&hd=1\n",
                $&
            ) if /[^\(]+(?=\)$)/
        ' file.txt
        

        【讨论】:

          猜你喜欢
          • 2019-10-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多