2017-01-19 67 views
0

我有一個文件,有很多測試用例我必須做的找到「eapi(」和替換爲「case(counter,」。這裏計數器是從1,2開始..等查找並替換特定的文本與sed

輸入文件

eapi(price1(....)) 

eapi(price2(....)) 

eapi(price3(....)) 

eapi(price4(....)) 

預期結果:

case(1,price1(....)) 

case(2,price2(....)) 

case(3,price3(....)) 

case(4,price4(....)) 
. . . . . 

我用sed命令之下,但不工作

請指教。

回答

0

你可以這樣說:

COUNTER=1 
cat input.txt | while read a 
do 
    echo $a | sed "s/eapi(/case($COUNTER,/" 
    echo " $COUNTER " 
    COUNTER=$[$COUNTER +1] 
done 
+0

謝謝..它的工作 –

0

你可以這樣做:

i=1 
while read -r line; do 
     sed "s/eapi(/case($i,/" <<< $line 
     ((i++)) 
done < $1 

隨着你輸入的結果是:

case(1,price1(....)) 
case(2,price2(....)) 
case(3,price3(....)) 
case(4,price4(....)) 

據我知道你必須在Sed中使用雙引號才能獲取變量的內容。所以用雙引號它正在工作。

0

如果該號碼始終是相同的,你可以這樣做:

#!/bin/bash 
IFS=$'\n' 
while read a 
do 
    nr=$(echo $a | grep -oP 'eapi\(price\K([0-9]+)') 
    echo "$a" | sed 's/eapi(/case('$nr',/' 
done < input 
+0

這個腳本將像輸入中的空白行一樣工作,就像你問。 –

0

對於這種類型的替換,可以使用awk

awk '/^eapi\(price/{sub(/eapi\(price/,"case(" ++c ",price")}1' file 

這通過添加計數器替換模式^eapi\(pricec和想要的字符串。