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

How to extract a part of a string using regex, when starting and ending portion of the string is given

我正在编写一个 fabric 脚本来更改 nodejs 版本。为此,我需要删除

node-v0.10.32-linux-x64

并将其替换为

node-v6.9.1-linux-x64

反之亦然。

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

/home/portweb/software/nodejs/node-v0.10.32-linux-x64/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-x64node-v6.9.1-linux-x64;

这是 sed 的正则表达式:

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

请注意,为了便于阅读,您可以使用 / 以外的分隔符,所以这里我们使用 ,

您可以使用 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')

和运行:

$ 很棒 sed_node