Ошибка возникает из-за запуска скрипта с /bin/sh
, который не имеет конкретного расширения параметра, которое вы используете. Вы используете /bin/sh
, потому что у вас есть пробел между #
и !
в первой строке.
Допускаются пробелы после the!
:Допускается ли пробел между #! и /bin/bash в Шебанге?
Также относится:Какой интерпретатор оболочки запускает скрипт без шебанга?
Здесь можно легко обойтись одним скриптом:
find. -type f -name '*.enc' -exec bash -c '
for n do
n=${n##*/}
printf "Full name:\t%s\n" "$n"
printf "Cut name:\t%s\n" "${n:0:6}"
done' sh {} +
Запуск этого с указанными вами именами файлов приведет к
Full name: 0bd57df4.enc
Cut name: 0bd57d
Full name: 3189204c.enc
Cut name: 318920
Full name: 39f831fb.enc
Cut name: 39f831
Full name: 68ff6d19.enc
Cut name: 68ff6d
Если вы просто хотите удалить расширение:
find. -type f -name '*.enc' -exec sh -c '
for n do
n=${n##*/}
printf "Full name:\t%s\n" "$n"
printf "Cut name:\t%s\n" "${n%.*}"
done' sh {} +
Это дает
Full name: 0bd57df4.enc
Cut name: 0bd57df4
Full name: 3189204c.enc
Cut name: 3189204c
Full name: 39f831fb.enc
Cut name: 39f831fb
Full name: 68ff6d19.enc
Cut name: 68ff6d19
Это возможно:
sed 's/;SrcEndVer=[0-9]*/;SrcEndVer=1600/'
Выход:
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD
Поскольку никакой другой информации не предоставлено, я бы попробовал следующую команду sed.
sed -i -e 's/\(.*;SrcEndVer=\)[^;]*\(;.*\)/\11600\2/' file.txt
При этом file.txt
будет файлом, содержащим вашу строку.
s заменяет команду sed.
s/шаблон1/шаблон2/ заменит шаблон1 на шаблон2 \(xxx\)
— это обратная ссылка, на которую будет ссылаться номер, например. \1
sed поместит первую обратную ссылку \ (. *;SrcEndVer=\ )все до и включая ;SrcEndVer=SrcWorkspaceName=abc_1234;SrcEndVer=
затем [^;] *столько символов, которые не являются ';'1409
и во второй обратной ссылке \ (следующий ';' а также. *\)остаток строки ;Lang=ENU,FRA,NLD
.
sed заменит это первой обратной ссылкой \1 SrcWorkspaceName=abc_1234;SrcEndVer=
, затем 1600 и второй обратной ссылкой \2 ;Lang=ENU,FRA,NLD
.
Что даст тебе:SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD
Использование Миллера с форматом ДКВП :Ключ -пары значений :
$ echo 'SrcWorkspaceName=abc_1234;SrcEndVer=1409;Lang=ENU,FRA,NLD' |
mlr --dkvp --fs ';' put '$SrcEndVer = 1600'
SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD