【发布时间】:2019-11-25 17:57:56
【问题描述】:
我有多个这样的文件:
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 's/VAI_TEST$/&_TEMP/' file或sed 's/CREATE TABLE .*/&_TEMP/' file -
这对你有用吗?如果没有,有什么问题?请出示您的脚本。
-
VAI_TEST对此的实际了解是什么?看起来像非空格\S像/CREATE[ \t]+TABLE[ \t]+(\S+)/这样的东西可能是有益的。 -
我应该提到 VAI_TEST 是可变的。所以每个文件都有自己的名字。在下一个文件中,它是例如VAI_STATUS。
-
为什么不简单:
sed 's|VAI_TEST|VAI_TEST_TEMP|'?我认为不需要使用捕获组等。
标签: regex linux bash shell sed