2015-04-18 3 views
0

Я получаю набор строк в качестве входных данных в терминале. Мне нужно заменить подстроку ".awk" на ".sh" в каждой строке, используя shell, а затем вывести модифицированную строку. я написал такой сценарий для этого:Замена подстроки в вводе оболочки

#!/bin/bash 

while read line 
do 
    result=${line/.awk/.sh} 
    echo $result 
done 

Но это дает мне ошибку: script-ch.sh: 6: script-ch.sh: Bad substitution.

Как изменить этот простой скрипт, чтобы исправить ошибку?

UPD:".awk" может быть внутри строки. Например: "file.awk.old".

+1

Это работает для меня .. –

+0

Но у меня есть эта ошибка ... – VeLKerr

+0

Какая версия bash вы используете? Какое распределение? Он отлично работает для меня с v4.1.2 на Centos 6.5 –

ответ

2

Не знаете, почему это работает для вас, а не для меня .. может быть, вклад вы даете. В нем может быть место.

Это должно работать:

#!/bin/bash 

while read line 
do 
    result=$(echo $line | sed 's/\.awk/\.sh/') 
    echo $result 
done 
3

Если вы используете Bash, то нет ничего плохого с замещением. Там нет причин, чтобы породить дополнительную подоболочку и использовать отдельную утилиту, когда Баш замена подстроки был портной сделали, чтобы сделать эту работу:

$ fn="myfile.awk.old"; echo "$fn --> ${fn/.awk/.sh}" 
myfile.awk.old --> myfile.sh.old 

Примечание: если вы подставляя .sh для .awk, затем . не требуется. Достаточно простого ${fn/awk/sh}.

Я подозреваю, что у вас есть какой-то беспризорный символ DOS в вашем оригинальном скрипте.

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