Regex 在UNIX中使用SED消除单引号字符串
在我的文件中,我有如下内容Regex 在UNIX中使用SED消除单引号字符串,regex,unix,sed,Regex,Unix,Sed,在我的文件中,我有如下内容 <sql type="cognos">SELECT * FROM [PG WIND JAROS - JAROSODS].AGREMENT_MAS WHERE FILTER = 'Saravana' and ADDress = '32/36 Abc Nagar CH' </sql> <sql type="cognos">select OBJECT_TYPE 'Object Type', OBJECT_NAME
<sql type="cognos">SELECT * FROM [PG WIND JAROS - JAROSODS].AGREMENT_MAS WHERE FILTER = 'Saravana' and ADDress = '32/36 Abc Nagar CH' </sql>
<sql type="cognos">select OBJECT_TYPE 'Object Type',
OBJECT_NAME "Object Name",
from [PG WIND Jaros - JAROSDM].CX_WIND_LOOKUP_REF WHERE Filter = 'Kumaar' and STATUS = 'RICH' </sql>
SELECT*FROM[PG WIND JAROS-JAROSODS].AGREMENT\u MAS其中FILTER='Saravana'和ADDress='32/36 Abc Nagar CH'
选择对象类型“对象类型”,
对象名称“对象名称”,
来自[PG WIND Jaros-JAROSDM].CX_WIND_LOOKUP_REF,其中Filter='Kumaar'和STATUS='RICH'
在这里,我必须将所有内容转换为小写,除了单引号中的字符串。i、 e
输出:
<sql type="cognos">select * from [pg wind jaros - jarosods].agrement_mas where filter = 'Saravana' and address = '32/36 Abc Nagar CH' </sql>
<sql type="cognos">select object_type 'Object Type',
object_name "object name",
from [pg wind jaros - jarosdm].cx_wind_lookup_ref where filter = 'Kumaar' and status = 'RICH' </sql>
select*from[pg wind jaros-jarosods].agrement\u mas其中filter='Saravana'和address='32/36 Abc Nagar CH'
选择对象类型“对象类型”,
对象名称“对象名称”,
来自[pg wind jaros-jarosdm].cx_wind_lookup_ref,其中filter='Kumaar'和status='RICH'
我怎样才能在SED中实现这一点?请帮助我……这里有一个
awk
解决方案:
awk -F\' '{for (i=1;i<=NF;i++) printf "%s"(NF==i?RS:FS),(i%2?tolower($i):$i)}' file
<sql type="cognos">select * from [pg wind jaros - jarosods].agrement_mas where filter = 'Saravana' and address = '32/36 Abc Nagar CH' </sql>
<sql type="cognos">select object_type 'Object Type',
object_name "object name",
from [pg wind jaros - jarosdm].cx_wind_lookup_ref where filter = 'Kumaar' and status = 'RICH' </sql>
sed -e "s/^\([^']*\)$/\L\1/" -e "s/\([^']*\)\('[^']*'\)/\L\1\E\2/g" -e "s/\('[^']*\)$/\L\1/" file
awk-F\'{for(i=1;i这里有一个sed
解决方案:
awk -F\' '{for (i=1;i<=NF;i++) printf "%s"(NF==i?RS:FS),(i%2?tolower($i):$i)}' file
<sql type="cognos">select * from [pg wind jaros - jarosods].agrement_mas where filter = 'Saravana' and address = '32/36 Abc Nagar CH' </sql>
<sql type="cognos">select object_type 'Object Type',
object_name "object name",
from [pg wind jaros - jarosdm].cx_wind_lookup_ref where filter = 'Kumaar' and status = 'RICH' </sql>
sed -e "s/^\([^']*\)$/\L\1/" -e "s/\([^']*\)\('[^']*'\)/\L\1\E\2/g" -e "s/\('[^']*\)$/\L\1/" file
\L
将替换内容转换为小写(直到找到\E
)
我希望SQL关键字是大写的。这是一次性转换,您可以手动更改吗?(在vi中使用~)不,这不是一次性的改变。@user3459079我不知道这方面的知识,我猜这会很复杂。你没有awk
?几乎所有带有sed
的系统都有awk
我不确定sed
是否是适合这项工作的工具。Jotnesawk
解决方案要短得多。什么\E是否指?请参阅sed
手册页:\E
:停止由\L
或\U
启动的案例转换。