我有一个包含大量测试用例的文件,我要做的就是找到“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
请告知。
答案 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
。