[英]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.