繁体   English   中英

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

[英]Match word after pattern and append a suffix in a file using sed?

我有多个这样的文件:

CREATE TABLE VAI_TEST
   (
      TEST VARCHAR2(4000)
   ) ;

只有第一行是相关的。 我需要用 VAI_TEST_TEMP 替换 VAI_TEST。 结果应该是这样的:

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 脚本中使用该命令。 此外,如果可以将新名称保存在变量中以在进一步的步骤中使用它,将会很有帮助。

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

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

  • /^CREATE TABLE/ - 在以“CREATE TABLE”开头的行上,
  • s/[^ ]*$/ - 将结束行 ( $ ) 之前的非空格字符 ( [^ ] ) 替换$
  • &_TEMP - & - 无论这些字符是什么 - 以“_TEMP”为后缀

考虑

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM