如何在给出字符串的开始和结束部分时使用正则表达式提取字符串的一部分

时间:2016-11-17 10:50:49

标签: python regex fabric

我正在编写一个结构脚本来更改nodejs版本。要做到这一点,我需要删除

  

节点v0.10.32-Linux的64

并将其替换为

  

节点-v6.9.1-Linux的64

反之亦然。

下面是该行,我需要一个正则表达式来获取该行的粗体部分

/家庭/ portweb /软件/的NodeJS /的节点v0.10.32-Linux的64 / bin中

以下是更改nodejs版本的代码。

@task
def changeVersion(appname='nodejs', rootdir='/home/portweb/software',homedir='/home/portweb',tarfile='node-v6.9.1-linux-x64.tar.gz',nodeversion='node-v'):
    """install nodejs"""

    base_dir = rootdir +'/'+appname


    run ('if [ ! -d ' + base_dir + ' ] ; then mkdir -p ' + base_dir + '; fi')

    put('../package/'+tarfile, base_dir + '/', use_sudo=False)

    with cd (base_dir):
        run('tar -zxf '+ tarfile)


    run ('sed -i \'s/regex/'+nodeversion+'/g\' /home/portweb/.bashrc')

    print "****Nodejs Version Changed"

nodeversion = node-v0.10.32-linux-x64 node-v6.9.1-linux-x64 ;

2 个答案:

答案 0 :(得分:1)

这是sed的正则表达式:

"sed -i 's,/home/portweb/software/nodejs/\(.*\)/bin,/home/portweb/software/nodejs/'" + nodeversion + "'/bin,g'"

请注意,您可以使用/以外的分隔符来提高易读性,因此我们在这里使用了,

答案 1 :(得分:0)

你可以使用fabric sed函数替换你想要的 prueba.txt 链:

def sed_node():
    sed('/home/user/test/prueba.txt', 'node-v0.10.32-linux-x64', 'node-v6.9.1-linux-x64')

并运行:

$ fab sed_node