用数组中的sed替换字符串并存储为变量

时间:2015-04-10 14:48:09

标签: arrays string bash sed

如果我硬编码csgo路径,我的代码可以工作,但是如果我使用搜索功能并使用sed替换我搜索的目录,则代码失败。

    #Find directorties of CSGO instances to update
    updatepaths=`find /home/tcagame/ -type f -name "update_csgo.txt"`
    #Splits diretories on space to be read from the array
    updates=($updatepaths)


    #Path to CSGO instances to update
    #csgo="/home/tcagame/user/33/csgo/steam.inf"
    #Creating automated path
    csgo= echo "${updates[0]}" | sed  's,update_csgo.txt,csgo/steam.inf,'

    #Check for updates
    python $updatecheck $csgo > ~/autoupdate/status/updatestatus.txt

当我echo "$csgo"创建一个新行时,我认为这就是为什么它不起作用。

/home/tcagame/user/33/csgo/steam.inf
[New Line]

这是我试图以自动化方式实现的目标:

python srcupdatecheck /home/tcagame/iceman/206/csgo/steam.inf

1 个答案:

答案 0 :(得分:1)

使用mapfilefind输出行读取到数组中比依赖单词拆分更安全:您遇到的唯一问题是文件名是否包含换行符。< / p>

mapfile -t updates < <(find /home/tcagame/ -type f -name "update_csgo.txt")

在这里,您只需要参数扩展,而不是sed:

csgo="${updates[0]%update_csgo.txt}csgo/steam.inf"

或者,让我们为您做更多的繁重工作:

mapfile -t update_dirs < <(
    find /home/tcagame/ -type f -name "update_csgo.txt" -exec dirname '{}' \;
)
csgo="${update_dirs[0]}/csgo/steam.inf"