Bash 如果匹配,则查找字符串,然后向前复制行字符串

Bash 如果匹配,则查找字符串,然后向前复制行字符串,bash,Bash,我想让变量包含以下字符串 v1=“从id>1000的tablename中选择*” 现在我想通过bash/ksh脚本将这个select转换为delete 例如,当字符串“from”匹配行的其余部分复制到变量时,它很容易转换为delete语句,如行下方的 从id>1000的tablename中删除 您可以这样使用sed: v1="select c1,c2 from tablename where id > 1000" sed '/select .* from /s/select .* from

我想让变量包含以下字符串
v1=“从id>1000的tablename中选择*”

现在我想通过bash/ksh脚本将这个select转换为delete

例如,当字符串“from”匹配行的其余部分复制到变量时,它很容易转换为delete语句,如行下方的

从id>1000的tablename中删除

您可以这样使用sed:

v1="select c1,c2 from tablename where id > 1000"
sed '/select .* from /s/select .* from/delete from/' <<< "$v1"
delete from tablename where id > 1000
v1=“从id>1000的表名中选择c1、c2”
sed'/select.*from/s/select.*from/delete from/'怎么样:

sed 's/select .* \(from .*\)/delete \1/' sqlfile.txt

实际上,select将作为参数传递给bash脚本,因此有时选择几个列名,这一次也传递了,它看起来像v1=“select c1,c2 from tablename where id>1000”,所以在sed之后,它应该从tablename where id>1000中删除,所以您需要替换
select a,b,c,从
by
delete from
?我们如何替换,它是动态的,有时可能是单个列名,有时是多个列名。例如,从tablename中选择c1,其中id>1000有时选择c1,从tablename中选择c2,其中id>1000有时选择*您需要提供详细信息,哪些不起作用。您可以从上面的回答中看到SED的输出,这不是您所期望的吗?是的,看到一些时间V1值从表名中选择C1,其中ID > 1000有时从表名中选择C1、C2,其中ID > 1000,有时从表名中选择*,其中ID > 1000,我必须考虑所有的情况。