我有多个这样的文件:
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脚本中使用该命令。另外,如果可以将新名称保存在变量中以在以后的步骤中使用它,将很有帮助。
什么是实现此目标的好方法?
答案 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,\}
重复一次或多次。 &
代表