在模式之后匹配单词,并使用sed在文件中添加后缀?

时间:2019-11-25 17:57:56

标签: regex linux bash shell sed

我有多个这样的文件:

CREATE TABLE VAI_TEST
   (
      TEST VARCHAR2(4000)
   ) ;

仅第一行是相关的。我需要将VAI_TEST替换为VAI_TEST_TEMP。 结果应该是这样的:

CREATE TABLE VAI_TEST_TEMP
   (
      TEST VARCHAR2(4000)
   ) ;

我发现了多个与VAI_TEST匹配的正则表达式模式。

  • (?:CREATE TABLE )([A-Za-z_]*)[\r\n]
  • (?:.* TABLE )(.*$)
  • CREATE TABLE (.*)\n
  • (?:.* TABLE )(.*)\n

可能有更多更好的模式。 我的问题是用内容和后缀替换捕获组1的内容。

我尝试了多种sed组合,但几乎没有任何反应,或者我因错误的正则表达式模式(带有-r标志)或无效的引用\ 1(带有-e)标志而出错。

最后,我想在bash脚本中使用该命令。另外,如果可以将新名称保存在变量中以在以后的步骤中使用它,将很有帮助。

什么是实现此目标的好方法?

2 个答案:

答案 0 :(得分:0)

sed '/^CREATE TABLE/s/[^ ]*$/&_TEMP/' file

  • /^CREATE TABLE/-以“ CREATE TABLE”开头的行,
  • s/[^ ]*$/-将结尾行([^ ])之前的非空格字符($)替换为:
  • &_TEMP-&-不论那些字符是-都带有“ _TEMP”后缀

答案 1 :(得分:0)

考虑

sed -i 's/CREATE TABLE [^[:space:]]\{1,\}$/&_TEMP/' file

[^[:space:]]用于空格以外的任何符号,并且\{1,\}重复一次或多次。 &代表

相关问题