Shell 用另一个类似的行替换一行的脚本
我有一个目录,其中许多SQL文件都有如下代码(第1行)。我想用第2行替换所有这些引用。有谁能告诉我如何做到这一点? 第1行:Shell 用另一个类似的行替换一行的脚本,shell,unix,Shell,Unix,我有一个目录,其中许多SQL文件都有如下代码(第1行)。我想用第2行替换所有这些引用。有谁能告诉我如何做到这一点? 第1行: utl_file.Putf(g_logfile, '******This is sample log msg:' || '\n'); 第2行: 你的意思是这样的 #!/bin/sh # loop over all *.sql files for file in *.sql; do sed -i ' # if pattern match -->
utl_file.Putf(g_logfile, '******This is sample log msg:' || '\n');
第2行:
你的意思是这样的
#!/bin/sh
# loop over all *.sql files
for file in *.sql; do
sed -i '
# if pattern match --> replace the rest of line
/utl_file.Putf(g_logfile,/ {s/ ||.*/, prc_name=>l_db_name);/}
# if pattern match --> replace head of line
s/utl_file.Putf(g_logfile,/write_log(log_desc=>/
' "$file"
done
使用sql文件在目录中启动此脚本。所有后缀为*.sql的文件都将被处理。你是指类似的内容吗
#!/bin/sh
# loop over all *.sql files
for file in *.sql; do
sed -i '
# if pattern match --> replace the rest of line
/utl_file.Putf(g_logfile,/ {s/ ||.*/, prc_name=>l_db_name);/}
# if pattern match --> replace head of line
s/utl_file.Putf(g_logfile,/write_log(log_desc=>/
' "$file"
done
$ cat file
fooutl_file.Putf(g_logfile, '******This is sample log msg:' || '\n');bar
$ awk -i inplace '
BEGIN { old=ARGV[1]; new=ARGV[2]; ARGV[1]=ARGV[2]="" }
s=index($0,old) {
$0 = substr($0,1,s-1) new substr($0,s+length(old))
}
1' \
"utl_file.Putf(g_logfile, '******This is sample log msg:' || '\n');" \
"write_log(log_desc=> '****** This is sample log msg:', prc_name=>l_db_name);" \
file
$ cat file
foowrite_log(log_desc=> '****** This is sample log msg:', prc_name=>l_db_name);bar
使用sql文件在目录中启动此脚本。将处理后缀为*.sql的所有文件
$ cat file
fooutl_file.Putf(g_logfile, '******This is sample log msg:' || '\n');bar
$ awk -i inplace '
BEGIN { old=ARGV[1]; new=ARGV[2]; ARGV[1]=ARGV[2]="" }
s=index($0,old) {
$0 = substr($0,1,s-1) new substr($0,s+length(old))
}
1' \
"utl_file.Putf(g_logfile, '******This is sample log msg:' || '\n');" \
"write_log(log_desc=> '****** This is sample log msg:', prc_name=>l_db_name);" \
file
$ cat file
foowrite_log(log_desc=> '****** This is sample log msg:', prc_name=>l_db_name);bar
上面使用GNU awk进行就地编辑,因此只需调用awk:awk'script'*
,您就可以一次更改所有文件。对于其他awk,只需在循环中写入tmp文件:for f in*;执行awk“脚本”$f“>tmp&mv tmp“$f”;完成
上面使用GNU awk进行就地编辑,因此只需调用awk:
awk'script'*
,您就可以一次更改所有文件。对于其他awk,只需在循环中写入tmp文件:for f in*;执行awk“脚本”$f“>tmp&mv tmp“$f”;完成
谢谢你的回答,但是==>s/| |.*/,prc_name=>l_db_name);/用prc_name=>l_db_name替换我代码中出现的所有| |,这不是我要找的。现在我想替换| |'\n')代码>带有,prc_name=>l_db_name)代码>尝试了此操作,但未起作用s/| |'\n');/,prc_name=>l_db_name)/代码>以及如何在同一文件中进行更改?这里我们保存在另一个文件中,可以在同一个文件中进行更改吗?我已经修改了脚本。谢谢您的回答,但是==>s/| |.*/,prc_name=>l_db_name);/用prc_name=>l_db_name替换我代码中出现的所有| |,这不是我要找的。现在我想替换| |'\n')代码>带有,prc_name=>l_db_name)代码>尝试了此操作,但未起作用s/| |'\n');/,prc_name=>l_db_name)/代码>以及如何在同一文件中进行更改?这里我们正在另一个文件中保存,我们可以在同一个文件中进行更改吗?我已经修改了我的脚本。