Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 用另一个类似的行替换一行的脚本_Shell_Unix - Fatal编程技术网

Shell 用另一个类似的行替换一行的脚本

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 -->

我有一个目录,其中许多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 --> 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)/以及如何在同一文件中进行更改?这里我们正在另一个文件中保存,我们可以在同一个文件中进行更改吗?我已经修改了我的脚本。