使用sed查找并替换特定文本

时间:2017-01-19 14:05:30

标签: unix sed

我有一个包含大量测试用例的文件,我要做的就是找到“eapi(”并替换为“case(counter)”。这里的计数器是从1,2开始的。等等。

输入文件

eapi(price1(....))

eapi(price2(....))

eapi(price3(....))

eapi(price4(....))

预期结果:

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

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

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

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

我使用下面的sed命令但没有工作。

COUNTER=1
while read a
do
     sed 's/eapi(/case(`echo $COUNTER`,/' $a
     echo " $COUNTER "
     COUNTER=$[$COUNTER +1]
done < input

请告知。

4 个答案:

答案 0 :(得分:0)

你可以这样做:

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

答案 1 :(得分: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中使用双引号来获取变量的内容。所以使用双引号它是有效的。

答案 2 :(得分: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

答案 3 :(得分:0)

对于此类替换,您可以使用awk

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

这会通过添加计数器^eapi\(price和所需的字符串来替换模式c

相关问题