簡體   English   中英

使用 sed 命令搜索單詞並替換下一個單詞

[英]Using sed command search for a word and substitute the next word

我有一個大文件,其中包含單詞 TITLE 和附近的單詞 name 。 所以,例如:

cat file1 :

NAME('SAM') SURNAME('WILLIAMS') PASWD('SAMWIL') TITLE('QA')
NAME('JOHN') SURNAME('ROGERS') PASWD('ROGJH') TITLE('QA')
NAME('MATT') SURNAME('JERRY') GRP('ONE') TITLE('RN') PASWD('JERMAT')
NAME('TEST2') SURNAME('NAZ') GRP('TWO') AUTH(USE) TITLE('DEV') GRP('ONE')

我正在嘗試將所有 TITLE(...) 替換為 TITLE('DEV') 。 所以,輸出應該是:

cat file1 :

NAME('SAM') SURNAME('WILLIAMS') PASWD('SAMWIL') TITLE('DEV')
NAME('JOHN') SURNAME('ROGERS') PASWD('ROGJH') TITLE('DEV')
NAME('MATT') SURNAME('JERRY') GRP('ONE') TITLE('DEV') PASWD('JERMAT')
NAME('TEST2') SURNAME('NAZ') GRP('TWO') AUTH(USE) TITLE('DEV') GRP('ONE')

我只是用 sed 來 grep 標題和之后的所有內容:

sed 's/.*\(TITLE...\)/\1/' file1 

不確定如何替換 TITLE 部分。 任何幫助表示贊賞,謝謝。

如果您的示例輸入文件代表所有可能的輸入,那么以下可能是您可以獲得的最短且仍然可讀的解決方案

sed "s/TITLE([^)]*)/TITLE('DEV')/" file1

對於給定的格式,這將執行以下操作:

sed -e "s#\(TITLE('\)[^']\+')#\1DEV')#" file1

實際上這可能更容易解析:

sed -e "s#\<TITLE('[^']\+')\>#TITLE('DEV')#" file1

並且我們並沒有真正為自己節省那么多使用反向引用的輸入。

您可以找到TITLE('<CHARS_NOT_APOSTROPHE>')任何實例(我還添加了單詞邊緣以進行良好測量。)並將其替換為TITLE('DEV')

sed --expression="s/TITLE('[^']*')/TITLE('DEV')/" file1

如果您需要對上述 RegExp 的解釋,請告訴我。

樣本數據:

$ cat titles.dat
NAME('SAM') SURNAME('WILLIAMS') PASWD('SAMWIL') TITLE('QA')
NAME('JOHN') SURNAME('ROGERS') PASWD('ROGJH') TITLE('QA')
NAME('MATT') SURNAME('JERRY') GRP('ONE') TITLE('RN') PASWD('JERMAT')
NAME('TEST2') SURNAME('NAZ') GRP('TWO') AUTH(USE) TITLE('DEV') GRP('ONE')

一種sed解決方案:

$ sed "s/\(TITLE('\)[^']*\(')\)/\1DEV\2/g" titles.dat
NAME('SAM') SURNAME('WILLIAMS') PASWD('SAMWIL') TITLE('DEV')
NAME('JOHN') SURNAME('ROGERS') PASWD('ROGJH') TITLE('DEV')
NAME('MATT') SURNAME('JERRY') GRP('ONE') TITLE('DEV') PASWD('JERMAT')
NAME('TEST2') SURNAME('NAZ') GRP('TWO') AUTH(USE) TITLE('DEV') GRP('ONE')

在哪里:

  • \\(TITLE('\\) - 找到我們的第一個模式TITLE(' ; 存儲為模式 #1
  • [^']* - 匹配模式 #1 之后的所有內容,只要不是單引號 (')
  • \\(')\\) - 找到我們的第二個模式') ; 存儲為模式 #2
  • \\1DDEV\\2 - 輸出模式 #1 + 'DEV' + 模式 #2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM