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