1、文件名大小写转换
OLDFILE=OLD.FILE
NEWFILE=`echo $OLDFILE | tr 'A-Z' 'a-z'`
2、文件内容大小写转换
如将目录TEST下所有文件的文件内容转成小写
DIR=TEST
for file in `ls $DIR`
newfile=`echo $file|tr 'A-Z' 'a-z'`
cat $DIR/$file | tr 'A-Z' 'a-z' > $DIR/$newfile
done
3、转换编码
iconv -c -f GBK -t UTF-8 $file -o $newfile
4、部分替换,如将delete替换为delete from,但如果原就是delete from,则不变
如: delete from table1 where x = 1;
delete table1 where x = 1;
sed '/ from/!s/delete /delete from/g' --不能使用双引号
解释: / from/! 是条件,表示若不存在匹配" from",反之 / from/ 就表示存在匹配。
s/delete /delete from/g 就是将delete 替换为delete from。
5、在匹配行之前之后添加行
如: This is first line.
This is last line.
要在This is last line之前添加一行This is second line.
sed '/^.* last line.$/i\This is second line.'
要在This is last line之后添加一行 This is new last line.
sed '/^.* last line.$/a\This is new last line.'
解决: i\表示在匹配行之前插入一行, a\表示在匹配行之后追加一行。
6、跨行指定区间匹配
select top 1 stuid into myid from students
where age = 17;
sed -e ":begin; /select top 1/,/;/ { /;/! { $! { N; b begin }; }; s/select top 1 \(.*\);/select \1 limit 1;/; };"
解释:
:begin 表示一个跳转的标记点
/select top 1/,/;/ 表示起始点为 “select top 1",结束点为 “;”
/;/! 表示条件,不匹配";"
$! $表示结束符,在sed中表示文件结束,$!表示文件未结束
N 表示把下一行追加到缓冲区,即与前一行逻辑上变为一行,实际上换行符仍存在。
b begin 跳转 begin标记点
7、提取指定字符串
如提取创建trigger语句中的trigger名,动作 所属表名 等
create or replace trigger "mytrigger" disable
after delete on "students"
for each row
as
declare
begin
...
end;
可采用以下脚本
sed -e ':begin; /create or replace trigger/,/end;/ { /end;/! { $! { N; b begin }; }; s/create or replace trigger "\([_|a-z]\+\)" *\(disable\)*[ |\n]*\([a-z]\+\) \([ |a-z]\+\) on "\(.*\)".*/\1 \2 \3 \4 \5/; };'
结果: mytrigger disable after delete students
8、注释若干行文件内容 (注意注释的内容中不能出现 "*/",若存在则需要先删除它)
如
begin
...
end;
注释begin到end之间的内容。
sed '/^begin;/a\\/*'
sed '/^end;/i\*\/'
结果如下:
begin
/*
...
*/
end;
OLDFILE=OLD.FILE
NEWFILE=`echo $OLDFILE | tr 'A-Z' 'a-z'`
2、文件内容大小写转换
如将目录TEST下所有文件的文件内容转成小写
DIR=TEST
for file in `ls $DIR`
newfile=`echo $file|tr 'A-Z' 'a-z'`
cat $DIR/$file | tr 'A-Z' 'a-z' > $DIR/$newfile
done
3、转换编码
iconv -c -f GBK -t UTF-8 $file -o $newfile
4、部分替换,如将delete替换为delete from,但如果原就是delete from,则不变
如: delete from table1 where x = 1;
delete table1 where x = 1;
sed '/ from/!s/delete /delete from/g' --不能使用双引号
解释: / from/! 是条件,表示若不存在匹配" from",反之 / from/ 就表示存在匹配。
s/delete /delete from/g 就是将delete 替换为delete from。
5、在匹配行之前之后添加行
如: This is first line.
This is last line.
要在This is last line之前添加一行This is second line.
sed '/^.* last line.$/i\This is second line.'
要在This is last line之后添加一行 This is new last line.
sed '/^.* last line.$/a\This is new last line.'
解决: i\表示在匹配行之前插入一行, a\表示在匹配行之后追加一行。
6、跨行指定区间匹配
select top 1 stuid into myid from students
where age = 17;
sed -e ":begin; /select top 1/,/;/ { /;/! { $! { N; b begin }; }; s/select top 1 \(.*\);/select \1 limit 1;/; };"
解释:
:begin 表示一个跳转的标记点
/select top 1/,/;/ 表示起始点为 “select top 1",结束点为 “;”
/;/! 表示条件,不匹配";"
$! $表示结束符,在sed中表示文件结束,$!表示文件未结束
N 表示把下一行追加到缓冲区,即与前一行逻辑上变为一行,实际上换行符仍存在。
b begin 跳转 begin标记点
7、提取指定字符串
如提取创建trigger语句中的trigger名,动作 所属表名 等
create or replace trigger "mytrigger" disable
after delete on "students"
for each row
as
declare
begin
...
end;
可采用以下脚本
sed -e ':begin; /create or replace trigger/,/end;/ { /end;/! { $! { N; b begin }; }; s/create or replace trigger "\([_|a-z]\+\)" *\(disable\)*[ |\n]*\([a-z]\+\) \([ |a-z]\+\) on "\(.*\)".*/\1 \2 \3 \4 \5/; };'
结果: mytrigger disable after delete students
8、注释若干行文件内容 (注意注释的内容中不能出现 "*/",若存在则需要先删除它)
如
begin
...
end;
注释begin到end之间的内容。
sed '/^begin;/a\\/*'
sed '/^end;/i\*\/'
结果如下:
begin
/*
...
*/
end;