繁体   English   中英

取一部分字符串并在bash中创建单独的变量

[英]Take parts of a string and create separate variables in bash

我想要这个字符串:

t.mysite\/images\/test\/m\/[mike]_Original_Work_-_summer\/thumbs\/001.thumb.jpg","\/\/t.mysite\/images\/manga\/m\/[mike]_Original_Work_-_summer\/thumbs\/002.thumb.jpg","\/\/t.mysite\/images\/manga\/m\/[mike]_Original_Work_-_summer\/thumbs\/003.thumb.jpg"];

分开它,所以我有:

var1 = "t.mysite/images/test/m/[mike]_Original_Work_-_summer/images/001.jpg"
var2 = "t.mysite/images/test/m/[mike]_Original_Work_-_summer/images/002.jpg"
var3 = "t.mysite/images/test/m/[mike]_Original_Work_-_summer/images/003.jpg"

然后wget每个变量。

如果可能的话,将获取的文件添加到另一个目录,例如/ home / mike / Pictures。

提前致谢 :)

有很多方法可以做到这一点。 参数扩展与子字符串提取以及子字符串替换一起使用是将字符串解析为单独变量的一种简便方法。 以下键关闭了字符串之间的","//分隔符。 因此,只要您提供类似格式的行,以下内容就会根据要求将原始行分为3个变量:

#!/bin/bash

str='t.mysite\/images\/test\/m\/[mike]_Original_Work_-_summer\/thumbs\/001.thumb.jpg","\/\/t.mysite\/images\/manga\/m\/[mike]_Original_Work_-_summer\/thumbs\/002.thumb.jpg","\/\/t.mysite\/images\/manga\/m\/[mike]_Original_Work_-_summer\/thumbs\/003.thumb.jpg"];'

var1=${str%%\"*}         # remove from rt. to first " (substring extraction)
var1=${var1//\\/}        # remove all \               (substring replacement)

var2=${str//\\/}         # remove all \                      (ss replacement)
var2=${var2#*\",\"\/\/}  # remove up to first ","// from lt. (ss extraction)
var2=${var2%%\"*}        # remove all to first " from rt.    (ss extraction)

var3=${str//\\/}         # remove all \                     (ss replacement)
var3=${var3##*\",\"\/\/} # remove up to last ","// from rt. (ss extraction)
var3=${var3%%\"*}        # remove all to first " from rt.   (ss extraction)

echo "var1: $var1"       # output variables
echo "var2: $var2"
echo "var3: $var3"

exit 0

输出:

$  bash parsestr.sh
var1: t.mysite/images/test/m/[mike]_Original_Work_-_summer/thumbs/001.thumb.jpg
var2: t.mysite/images/manga/m/[mike]_Original_Work_-_summer/thumbs/002.thumb.jpg
var3: t.mysite/images/manga/m/[mike]_Original_Work_-_summer/thumbs/003.thumb.jpg

我编写了以下脚本:(不要相信此处突出显示的语法; "$(command)"内的命令中的引号" 不会破坏外部引号)”

string='["sd\"fg","dgf","dsfgsdfg\\sdfg"];'
echo "\$string is $string"

#strip off the initial [" and ending "];
string="$(echo $string | sed -r 's:^\s?\[?\s?"?::' | sed -r 's:"?\s?\]?\s?;?\s?$::')"
echo "\$string is $string"

echo
while [[ $string ]]; do
    url=$(echo $string |
          sed -r 's:^((\\"|\\\\|\\/|[^"])*).*:\1:' | # take just the first url
          sed -r 's:\\":":g' | sed -r 's:\\/:/:g' | sed -r 's:\\\\:\\:g' # clean it from any \"
         )
    echo "url is \"$url\""
    # do what you want with $url

    # remove the first url from the string
    string="$(echo $string | sed -r 's:^((\\"|\\\\|[^"])*)::' | sed -r 's:^","::')"
done

在我的系统中,输出为:

$string is ["sd\"fg","dgf","dsfgsdfg\\sdfg"];
$string is sd\"fg","dgf","dsfgsdfg\\sdfg

url is "sd"fg"
url is "dgf"
url is "dsfgsdfg\sdfg"

使用您的输入,输出为:

$string is t.mysite\/images\/test\/m\/[mike]_Original_Work_-_summer\/thumbs\/001.thumb.jpg","\/\/t.mysite\/images\/manga\/m\/[mike]_Original_Work_-_summer\/thumbs\/002.thumb.jpg","\/\/t.mysite\/images\/manga\/m\/[mike]_Original_Work_-_summer\/thumbs\/003.thumb.jpg"];
$string is t.mysite\/images\/test\/m\/[mike]_Original_Work_-_summer\/thumbs\/001.thumb.jpg","\/\/t.mysite\/images\/manga\/m\/[mike]_Original_Work_-_summer\/thumbs\/002.thumb.jpg","\/\/t.mysite\/images\/manga\/m\/[mike]_Original_Work_-_summer\/thumbs\/003.thumb.jpg

url is "t.mysite/images/test/m/[mike]_Original_Work_-_summer/thumbs/001.thumb.jpg"
url is "//t.mysite/images/manga/m/[mike]_Original_Work_-_summer/thumbs/002.thumb.jpg"
url is "//t.mysite/images/manga/m/[mike]_Original_Work_-_summer/thumbs/003.thumb.jpg"

但是,您想要的输出是不同的。 您真的要删除.thumb部分吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM