我以前曾经使用过 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