繁体   English   中英

如何使用sed替换部分查找

[英]How to use sed to replace partial of a find

文件中的某些行如下所示:

 LOB ("VALUE") STORE AS SECUREFILE "L_MS_WRKNPY_VALUE_0000000011"(
 LOB ("INDEX_XML") STORE AS SECUREFILE "L_HRRPTRY_INDX_L_0000000011"(

我可以假设的是,在"*" ,字符串以L_开头,以10个字符的数字结尾。

我想要每一行:

  1. 开始与LOB (之前的空白LOB
  2. "" ,前两个字母是L_
  3. 行始终以"(

用变量替换""的最后10个字符。

我要做的就是: cat /tmp/out.log | sed 's/_[0-9_]*/$NUM/g' > /tmp/newout.log cat /tmp/out.log | sed 's/_[0-9_]*/$NUM/g' > /tmp/newout.log

找到我运行所需的行: grep "^ LOB" create_tables_clean.sql | grep "\\"L_" grep "^ LOB" create_tables_clean.sql | grep "\\"L_"

但是我不知道如何将两者结合起来并得到我想要的。

sed -r 's/(\sLOB.*"L_.+_)([0-9]{10})("\()/\1'$myVar'\3/'

显然,用您的变量替换$myVar

在此处输入图片说明

我分为三个捕获组:

(\sLOB.*"L_.+_)  #catches everything until the 10 numbers
([0-9]{10})      #catches the 10 numbers
("\()            #catches the last "(

仅当您的行以LOB (前面有空格)开头且包含"L_时,第一个捕获组才匹配。
然后,您只需用变量替换第二个捕获组(仅包含10个数字),同时保留第一个和第三个捕获组( \\1'$myVar'\\3 )。

您的整个通话看起来像

cat /tmp/out.log | sed -r 's/(\sLOB.*"L_.+_)([0-9]{10})("\()/\1'$NUM'\3/g' > /tmp/newout.log

(注意,我将g修饰符添加到了正则表达式中,因此它将匹配每次出现的情况)

接受的sed命令中有几个无用的字符,此处较短。

sed -r 's/(LOB.*"L_.*)([0-9]{10})("\()/\1'$myVar'\3/' file

其次,@ Basti M,当您需要在字符串中用双引号引起回声时,请使用单引号,然后就不必转义双引号了。

echo 'LOB ("VALUE") STORE AS SECUREFILE "L_MS_WRKNPY_VALUE_0000000011"('

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM