Вы можете пока попробовать эту версию своего скрипта
#!/bin/ksh
ls *_Error.csv | while read i
do echo "${i}"
edfilename=$(echo "${i}" | sed -e 's/^\(s_([^_0-9]*_)*\)\([^\.]*\.csv\)$/\1/')
echo "${edfilename}"
done
Я не думаю, что aix sed понимает +
, поэтому я заменил их с *
. Если
вам действительно нужно +
, используйте \ {1, \}
, который может работать на aix.
Более простой шаблон, которого должно хватить: 's / \ ([^ 0-9] * \) _. * / \ 1 /'
Ваш файл сценария представляет собой текстовый файл DOS. Дополнительный возврат каретки в конце каждой строки сбивает с толку bash
(, он видит do\r
, а неdo
).
Преобразуйте его в текстовый файл Unix с помощью такого инструмента, как dos2unix
, или убедитесь, что ваш редактор сохраняет его как текстовый файл Unix.
Я только что выполнил тот же скрипт на моей машине Centos, который работает с файлом. Как предложил Кусалананда, конвертируйте файл сценария из dos в unix. установите пакет dos2unix, если он еще не установлен. Затем вы можете использовать команду ниже для преобразования $dos2unix (имя файла)
#!/bin/bash
for i in 1 2 3 4 5
do
echo "Count $i"
done;
Лучше зациклить:
for i in {1..5}; do
echo "Count $i";
done
Таким образом, вам не нужно указывать все эти номера. Итак, что бы вы сделали, если бы вам пришлось перебрать 100 чисел, используя ваш метод?