2017-01-19 3 views
0

У меня есть файл с большим количеством тестовых примеров, что мне нужно найти «eapi (« и заменить на «case (counter», здесь counter start from 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

Спасибо ..it работает –

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\(price путем добавления счетчика c и нужную строку.

Смежные вопросы