我有一個文本文件如下SED/awk中如何搜索並替換文本行不包括文本塊
PARAMETER=VALUE
PARAMETER1=VALUE
[START]
PARAMETER=VALUE
[END]
我想用sed搜索PARAMETER
與精確匹配和替換整條生產線新的文字。但我想排除同一PARAMETER
如果[START]
和[END]
之間你能夠幫助構建sed
或awk
命令
我有一個文本文件如下SED/awk中如何搜索並替換文本行不包括文本塊
PARAMETER=VALUE
PARAMETER1=VALUE
[START]
PARAMETER=VALUE
[END]
我想用sed搜索PARAMETER
與精確匹配和替換整條生產線新的文字。但我想排除同一PARAMETER
如果[START]
和[END]
之間你能夠幫助構建sed
或awk
命令
使用SED:
sed '/^\[START\]/,/^\[END\]/!s/^PARAMETER=.*/replacement/'
說明:
/^\[START\]/,/^\[END\]/
:匹配所有章節開始與[START]
與[END]
!
結束:忽略該地址,即所有線路相匹配的部分外(s)s/^PARAMETER=.*/replacement/
:取代每一個林Ë與PARAMETER=
實例開始:
$ cat input.txt
PARAMETER=VALUE
PARAMETER1=VALUE
[START]
PARAMETER=VALUE
[END]
$ sed '/^\[START\]/,/^\[END\]/!s/^PARAMETER=.*/replacement/' input.txt
replacement
PARAMETER1=VALUE
[START]
PARAMETER=VALUE
[END]
$
在awk中使用f
滯後:
$ awk '
/^PARAMETER/ && f!=1 { $0="THE REPLACEMENT" } # replace when flag not raised
/\[START\]/ { f=1 } # raise flag at marker
/\[END\]/ { f=0 } # flip flag at the other
1' file # output
THE REPLACEMENT
THE REPLACEMENT
[START]
PARAMETER=VALUE
[END]
編輯增加了一行 -
$ awk '/^PARAMETER/&&f!=1{$0="THE REPLACEMENT"}/\[START\]/{f=1}/\[END\]/{f=0}1' file
@Prashant:嘗試:雖然詹姆斯的代碼和我的代碼沒有太大的區別。唯一的事情就是我要爲你的文字準確地匹配字符串「PARAMETER」而不是匹配字符串「PARAMETER1」。
awk -F"=" '/\[END\]/{A=""} /\[START\]/{A=1} !A && $1 == "PARAMETER"{print "NEW_VALUES";next} 1' Input_file
我在這裏做字段分隔符爲「=」,然後在一條線上尋找字符串開始,如果是,那麼做一個變量A的值爲1的線路尋找串END,使變量a的值爲NULL 。因此,然後檢查條件,如果變量A的值是NULL,$ 1是PARAMETER然後打印新值並給下一個跳過進一步的語句。放置1將打印所有行(當然,這些行並不會隨着新值而改變,因爲當新值被打印時,程序沒有達到1,所以它不會在那裏打印)。
您需要使用反斜槓來轉義'['和']'以便從字面上匹配這些字符。就像現在一樣,單詞「開始」和「結束」中的任何字符將開始/結束一個部分。 –
可以讓我們知道什麼是你從末試過嗎? –