呱呱侠 2015-02-03 15:05 采纳率: 0%
浏览 727

linux脚本查询替换问题学习

#!/bin/sh

n=ls -l /home/huabo/workspaceNew/iconpack/IconPack/app/src/main/res/drawable-640dpi |grep iconback |wc -l
echo $n

for A in $(seq 1 $n)

do
B=seq -s " " -f"iconback%02g" 1 $A
C=seq -s " " -f"img%0g" 1 $A
done
sed -i "s/img1=\"iconback01\" img2=\"iconback02\" img3=\"iconback03\" img4=\"iconback04\" img5=\"iconback05\" img6=\"iconback06\" img7=\"iconback07\" img8=\"iconback08\" img9=\"iconback09\" img10=\"iconback10\"/$C\=\"$B\"/g" /home/huabo/workspaceNew/iconpack/IconPack/app/src/main/res/xml/appfilter.xml

我这主要的问题是想先通过查询图片目录drawable,过滤图片名称iconback,统计张数,然后有另一个xml文件有一行代码是; ,我想通过sed的方法去替换,例如:如果查询的图片只有两张(图片的命名都是以iconback01,icoback02...的方式),那么xml代码显示的是: ,现在我的情况就是,结果显示的是img1 img2=iconback01 iconback02,格式不对呀,有点不明白 。。。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 08:53
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你的代码有一些小错误和一些未实现的功能。这里有一个修正后的版本:

    #!/bin/bash
    
    # 获取要处理的文件列表
    files=$(ls -l /home/huabo/workspaceNew/iconpack/IconPack/app/src/main/res/drawable-640dpi)
    
    # 检查是否有图标返回
    if [ "$files" == "" ]; then
        echo "No icons found"
        exit 1
    fi
    
    # 统计图标数量
    num_icons=$(echo "$files" | grep 'iconback' | wc -l)
    echo "Number of icons: $num_icons"
    
    # 遍历每个图标并打印其索引
    for i in $(seq 1 $num_icons); do
        # 取出当前图标
        icon=${files:$i:1}
    
        # 替换图像标签
        new_icon="${icon//iconback//}"
        echo "Replacing icon: $icon with: $new_icon"
        
        # 将新图标写入到XML文件中
        sed -i "/$icon/,/^/d" /home/huabo/workspaceNew/iconpack/IconPack/app/src/main/res/xml/appfilter.xml
        echo "Writing new icon to XML file"
    done
    

    这个脚本首先获取了所有.res/drawable-640dpi文件,并检查它们是否包含“iconback”。如果没有找到任何图标,它将输出一条消息并退出。如果找到了图标,它会计算这些图标的数量并将总数打印出来。

    然后,它遍历每一张图,查找其中的“iconback”字符串,并将其替换成“iconback01”、“iconback02”等。最后,它将这些修改过的图标写回XML文件。

    注意:这个脚本使用了grep, sedawk命令来执行替换操作,而wc命令用于统计文件中的行数。

    评论

报告相同问题?