【发布时间】:2018-01-03 09:11:43
【问题描述】:
我正在尝试使用 sed 将文件中的 a.mysql.com 替换为以下行
'ENGINE': 'a.mysql.com', # MySQL host
如何在不删除评论条目的情况下替换文本?
我尝试了以下方法,但它不起作用
sed -i -e "s/\('ENGINE': ').*\([^']*\)/\1new.mysql.com\2/g" file.py
【问题讨论】:
标签: sed
我正在尝试使用 sed 将文件中的 a.mysql.com 替换为以下行
'ENGINE': 'a.mysql.com', # MySQL host
如何在不删除评论条目的情况下替换文本?
我尝试了以下方法,但它不起作用
sed -i -e "s/\('ENGINE': ').*\([^']*\)/\1new.mysql.com\2/g" file.py
【问题讨论】:
标签: sed
关注sed 可能对您有所帮助。
sed "s/\(.*: \)\('.*'\)\(.*\)/\1'my_next_text'\3/" Input_file
输出如下。
'ENGINE': 'my_next_text', # MySQL host
编辑: 也用 OP 的编辑 Input_file 对其进行了测试,如下所示。
cat Input_file
'ENGINE': 'a.mysql.com', # MySQL host
sed "s/\(.*: \)\('.*'\)\(.*\)/\1'my_next_text'\3/" Input_file
'ENGINE': 'my_next_text', # MySQL host
EDIT2: 如果 OP 想要检查其中包含字符串 ENGINE 的行,则可以执行以下操作。
sed "/ 'ENGINE/s/\(.*: \)\('.*'\)\(.*\)/\1'my_next_text'\3/" Input_file
【讨论】:
ENGINE 的行并执行某些操作,那么我的 EDIT2 代码可能会对您有所帮助。
您可以使用以下逻辑使用 GNU sed 来实现您的要求。
sed "/ENGINE/s/'[^']*'/'new.mysql.com'/2" file
s/ENGINE/ 匹配任何包含 ENGINE 的行并执行以下替换 s/'[^']*'/'new.mysql.com'/2 其中:
s/ # Substitute
' # Match a single quote
[^']* # Match anything not a single quote
' # Match the closing single quote
/ # Replace with
'new.mysql.com' # The literal value
/2 # The 2 here matches the second quoted string, not the first.
适当修改文件后添加-i 扩展名。
【讨论】:
'ENGINE': 'new.mysql.com', # MySQL host。要么你运行错误,要么有一个单独的输入文件,而不是问题中发布的文件