Awk 如何替换文件中特定于SQL的行?

Awk 如何替换文件中特定于SQL的行?,awk,sed,Awk,Sed,在询问之前,我尝试了一些sed&awk,但没有成功,所以我来了 我希望用它来替换bash脚本中的某些行(在.sql文件中)。问题是,在我看来,特定于SQL的反勾号&可能是单引号 实际要做的事情是替换像 `payment\u methods`text COLLATE utf8\u unicode\u ci DEFAULT'-1', 到 `payment\u methods`文本整理utf8\u unicode\u ci, SQL转储约为10GB sed-i's/`payment\u metho

在询问之前,我尝试了一些sed&awk,但没有成功,所以我来了

我希望用它来替换bash脚本中的某些行(在.sql文件中)。问题是,在我看来,特定于SQL的反勾号&可能是单引号

实际要做的事情是替换像

`payment\u methods`text COLLATE utf8\u unicode\u ci DEFAULT'-1',

`payment\u methods`文本整理utf8\u unicode\u ci,
SQL转储约为10GB

sed-i's/`payment\u methods`text COLLATE utf8\u unicode\u ci DEFAULT'-1',/`payment\u methods`text COLLATE utf8\u unicode\u ci,/'file.sql
或使用行号:

sed-i'357s/*/`payment\u methods`text COLLATE utf8\u unicode\u ci,/'file.sql

还忘了提到对转义字符使用反斜杠没有帮助。

对于所显示的示例,请尝试以下内容

awk 'FNR==357{sub(/ DEFAULT \047-1\047,/,"")} 1' Input_file
awk '
FNR==357 && /`payment_methods` text COLLATE utf8_unicode_ci DEFAULT \047-1\047,/{
  sub(/ DEFAULT \047-1\047,/,"")
}
1' Input_file
或者,如果您想验证第357行的内容及其行号,请尝试以下操作

awk 'FNR==357{sub(/ DEFAULT \047-1\047,/,"")} 1' Input_file
awk '
FNR==357 && /`payment_methods` text COLLATE utf8_unicode_ci DEFAULT \047-1\047,/{
  sub(/ DEFAULT \047-1\047,/,"")
}
1' Input_file

注意:这将在终端上打印行,一旦您对结果满意,那么您可以将
>临时和&mv临时输入文件
附加到上述解决方案中,以将输出保存到输入文件本身。

对于显示的示例,请尝试以下内容

awk 'FNR==357{sub(/ DEFAULT \047-1\047,/,"")} 1' Input_file
awk '
FNR==357 && /`payment_methods` text COLLATE utf8_unicode_ci DEFAULT \047-1\047,/{
  sub(/ DEFAULT \047-1\047,/,"")
}
1' Input_file
或者,如果您想验证第357行的内容及其行号,请尝试以下操作

awk 'FNR==357{sub(/ DEFAULT \047-1\047,/,"")} 1' Input_file
awk '
FNR==357 && /`payment_methods` text COLLATE utf8_unicode_ci DEFAULT \047-1\047,/{
  sub(/ DEFAULT \047-1\047,/,"")
}
1' Input_file
注意:这将在终端上打印行,一旦您对结果满意,您可以将
>临时和&mv临时输入文件添加到上述解决方案中,以将输出保存到输入文件本身。

使用sed:

sed-rn“357s/(^.*付款方法。*文本整理utf8\U unicode\U ci)(默认值。*-1.*)(,$)/\1\3/p”文件
基于正则表达式将第357行拆分为3部分,然后用该行替换第一部分和第三部分,打印结果

要将更改提交回文件,请添加-i,然后执行以下操作:

sed-ri“357s/(^.*payment\u methods.*文本整理utf8\u unicode\u ci)(默认值。*-1.*)(,$)/\1\3/”文件
使用sed:

sed-rn“357s/(^.*付款方法。*文本整理utf8\U unicode\U ci)(默认值。*-1.*)(,$)/\1\3/p”文件
基于正则表达式将第357行拆分为3部分,然后用该行替换第一部分和第三部分,打印结果

要将更改提交回文件,请添加-i,然后执行以下操作:

sed-ri“357s/(^.*payment\u methods.*文本整理utf8\u unicode\u ci)(默认值。*-1.*)(,$)/\1\3/”文件

谢谢!是否可以在不打印文件中的所有行的情况下测试您的代码?@Yevhnorestov,一定要尝试像
awk'FNR==357{sub(/DEFAULT\047-1\047,/,”);print}Input_file
,这将只打印特定的行,也应用到我的或解决方案中,让我知道它是如何运行的?谢谢!是否可以在不打印文件中所有行的情况下测试您的代码?@Yevhnorestov,一定要像
awk'FNR==357{sub(/DEFAULT\047-1\047,/,“”);print}输入文件
,这样只会打印特定的行,也会应用到我的或解决方案中,让我知道进展如何?您的第一次
sed
尝试将失败,因为您无法嵌套单引号。另外两个在我看来,他们应该已经工作了。请尝试提供一个。它只是您要从“付款方式”列中删除的“默认“-1”部分?或者任何地方?您的第一次
sed
尝试将失败,因为您无法嵌套单引号。另外两个在我看来,他们应该已经工作了。请尝试提供一个。它只是您要从“付款方式”列中删除的“默认“-1”部分?或者任何地方?