Замена подстроки другим значением в основной строке

Ошибка возникает из-за запуска скрипта с /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

0
21.03.2020, 20:24
3 ответа

Это возможно:

sed 's/;SrcEndVer=[0-9]*/;SrcEndVer=1600/'

Выход:

SrcWorkspaceName=abc_1234;SrcEndVer=1600;Lang=ENU,FRA,NLD
0
28.04.2021, 23:19

Поскольку никакой другой информации не предоставлено, я бы попробовал следующую команду 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

0
28.04.2021, 23:19

Использование Миллера с форматом ДКВП :Ключ -пары значений :

$ 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
0
28.04.2021, 23:19

Теги

Похожие вопросы