【问题标题】:Grep Select ALL Images in code blockGrep 选择代码块中的所有图像
【发布时间】:2015-12-03 21:15:45
【问题描述】:

我在多个来源中搜索了 Grep 和 RegEx 选择器,以选择大量乱码和文本中的所有图像。我最接近的是How to Use grep to find '../images/',这对我不起作用。

我需要在我的源文件中选择所有图像名称的第一次出现(或将所有图像名称复制到单独的文件中),例如:

/Volumes/Data Drive/joomla-2-wp/wp-content/uploads/2003/12/someurl.com_images_ABanner.gif

只会选择

someurl.com_images_ABanner.gif

这是我尝试搜索的文本示例:

[fg-joomla-to-wordpress] Can't copy http://someurl.com/images/banners/ABanner.gif to /Volumes/Data Drive/joomla-2-wp/wp-content/uploads/2003/12/someurl.com_images_banners_ABanner.gif : Not Found
[fg-joomla-to-wordpress] Can't copy http://someurl.com/images/randy.jpg to /Volumes/Data Drive/joomla-2-wp/wp-content/uploads/2003/12/someurl.com_images_randy.jpg : Not Found
[fg-joomla-to-wordpress] Can't copy http://www.differenturl.com/images-body0/logo2.gif to /Volumes/Data Drive/joomla-2-wp/wp-content/uploads/2003/12/www.differenturl.com_images-body0_logo2.gif : Not Found
[fg-joomla-to-wordpress] Can't copy /images/DiffImage.jpg to /Volumes/Data Drive/joomla-2-wp/wp-content/uploads/2003/12/images_DiffImage.jpg : A valid URL was not provided.
[fg-joomla-to-wordpress] Can't copy /images/DSCN0248.jpg to /Volumes/Data Drive/joomla-2-wp/wp-content/uploads/2003/12/images_DSCN0248.jpg : A valid URL was not provided.

我认识到第一次出现的模式包含 /images/ 有一些例外(例如 /images-body0/imagename.jpg),而目标没有,这简化了它,但我就是无法理解。

【问题讨论】:

  • 请显示该示例文本的所需输出。
  • 嘿约翰。我做到了。在所有文本中,我只想选择图像名称,上面用“someurl.com_images_ABanner.gif”表示
  • 您的示例输入每行有两个图像名称。在文本中,您说您“需要选择第一个匹配项”。那是对的吗?或者,您是在寻找第二个图像文件名吗?
  • 我相信第一次出现(源)与第二次出现(目标)相同,这就是为什么我认为我们只需要第一次出现。示例代码(大部分情况下)表明无法将源复制到目标。我相信,但不是 100% 肯定(这是一个非常大的文件),每一行都是错误,表明源无法复制到目标。这有帮助吗?
  • 第一个和第二个确实不同。以第一行为例:第一行是ABanner.gif,第二行是omeurl.com_images_banners_ABanner.gif

标签: regex grep textwrangler


【解决方案1】:

用 sed 的扩展 (-E) 正则表达式怎么样?我正在选择在您输入的行尾 : 之前出现的所有图像(jpg、gif、png)。

$ sed -nE 's,^.*/([^/]*(jpg|gif|png)) : .*$,\1,p' file
someurl.com_images_banners_ABanner.gif
someurl.com_images_randy.jpg
www.differenturl.com_images-body0_logo2.gif
images_DiffImage.jpg
images_DSCN0248.jpg

【讨论】:

  • 工作完美,虽然我不得不复制到一个新文件。我要买它! (谢谢)
【解决方案2】:

如果文件中的所有行与示例中的模式相同,您可以像这样简单地提取每行的第 7 个字段:

$ cat file
[fg-joomla-to-wordpress] Can't copy http://someurl.com/images/banners/ABanner.gif to /Volumes/Data Drive/joomla-2-wp/wp-content/uploads/2003/12/someurl.com_images_banners_ABanner.gif : Not Found
[fg-joomla-to-wordpress] Can't copy http://someurl.com/images/randy.jpg to /Volumes/Data Drive/joomla-2-wp/wp-content/uploads/2003/12/someurl.com_images_randy.jpg : Not Found
[fg-joomla-to-wordpress] Can't copy http://www.differenturl.com/images-body0/logo2.gif to /Volumes/Data Drive/joomla-2-wp/wp-content/uploads/2003/12/www.differenturl.com_images-body0_logo2.gif : Not Found
[fg-joomla-to-wordpress] Can't copy /images/DiffImage.jpg to /Volumes/Data Drive/joomla-2-wp/wp-content/uploads/2003/12/images_DiffImage.jpg : A valid URL was not provided.
[fg-joomla-to-wordpress] Can't copy /images/DSCN0248.jpg to /Volumes/Data Drive/joomla-2-wp/wp-content/uploads/2003/12/images_DSCN0248.jpg : A valid URL was not provided.

$ cut -d' ' -f7 file | sed '/images/ s#.*/\([^/]*\)#\1#'
someurl.com_images_banners_ABanner.gif
someurl.com_images_randy.jpg
www.differenturl.com_images-body0_logo2.gif
images_DiffImage.jpg
images_DSCN0248.jpg

【讨论】:

    【解决方案3】:

    使用 awk

    如果我理解正确,您在示例文本中寻找的是第四个字段最后一个路径元素。在这种情况下:

    $ awk '{n=split($4,a,"/"); print a[n]}' file
    ABanner.gif
    randy.jpg
    logo2.gif
    DiffImage.jpg
    DSCN0248.jpg
    

    使用 sed

    要获取存在于copyto 之间的文件名的最后一个元素:

    $ sed -E 's|.* copy .*/(.*) to .*|\1|' file
    ABanner.gif
    randy.jpg
    logo2.gif
    DiffImage.jpg
    DSCN0248.jpg
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 2016-02-09
      • 2016-03-22
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      相关资源
      最近更新 更多