更新

更新

我以前曾经使用过 sed 来更新字符串,但是无法在两个已知字符串之间插入字符串。

我尝试使用它,但是没有更新任何内容。

sed -e '/^\dest="download",\$/,/^\action="store_true",\/ ^xyz .*/a default=True/'

这是需要在脚本中编辑的代码块。如果可能的话,我希望保留空格/制表符。

    parser.add_option(
        "--download",
        dest="download",
        action="store_true",
        help="Download preinstalled packages from PyPI.",
    )

插入的字符串是default=True,

    parser.add_option(
        "--download",
        dest="download",
        default=True,
        action="store_true",
        help="Download preinstalled packages from PyPI.",
    )

如果有人确实使用 awk 回答了这个问题,我希望了解该函数的工作原理,因此我希望得到详细的解释。

答案1

文件:parser.awk

#! /usr/bin/awk -f
# Above line is the shebang line and it's always the first line

# First string found?
/dest="download"/ {
    # Print current line
    print
    # Set the first string found flag
    flag = 1
    # Next line!
    next
}

# First string flagged AND second string found?
flag == 1 && /action="store_true"/ {
    # Print new line
    print "        default=True,"
    # Print current line
    print
    # Unflag first string
    flag = 0
    # Next line!
    next
}

# Other lines
{
    # Print current line
    print
}

具有可执行模式:

chmod 755 parser.awk

AWK 脚本使用如下:

./parser.awk file.txt

更新

一行sed:

sed '/dest="download"/{x;s/.*/./;x};/action="store_true"/{x;/^.$/{x;s/^/        default=True,\n/;x};s/^/./;x}' file.txt

相关内容