0
我有一個簡單的問題。linux替換字符串,如果其他字符串顯示'n'行之前
在具有下一個結構的文件中。
條件 LINE1
LINE2
line3中
字符串根據條件而改變。
該結構在文件中重複未定義的次數。
我必須根據第一行的值更改第四行。 在文件的所有發生。 我已經在shell腳本中創建了下一個函數,並且工作正常。
function normalizer() {
list=$(grep -n "STRING" $1 |cut -f1 -d:|wc -l)
coso=1
while [ $coso -le $list ];
do
direc=$(grep -n "STRING" $1 |cut -f1 -d:|head -$coso|tail -1)
str=$(perl -wne "print if $. == ($direc - 6)" $1)
if [ "$str" == "STING 2" ]; then
sed -i "${direc}s/STRING/DORSOC CARATR/" $1
else if [ "$str" == "STRING 3" ]; then
sed -i "${direc}s/STRING/DORSOC CARATU/" $1
else
echo dont match
fi
fi
let coso=$coso+1
done
}
但它效率不高,因爲sed爲每次更改都創建一個文件的副本。 那麼,你會如何做到這一點,使其更有效率?
編輯: 爲了澄清,第4行不能來,那麼我必須驗證它是否存在,然後驗證條件之前的3行。
你有沒有考慮切換到awk?它允許更多的»數據驅動«方法,在一個單一的過程和更小的代碼。如果sed存在於系統中,它可能也有awk – escitalopram