Скрипт Bash KSH для удаления последнего символа N - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь удалить последние 15 символов из строки, и мне нужно запустить этот BASH-скрипт с "ksh".Он очень хорошо работает с "bash", а с "ksh" - нет.Вот мой код,

#!/bin/bash
ggate_location="'$(ps -ef|grep mgr)'"
for word in $ggate_location
do
[[ $word =~ mgr\.prm$ ]] && echo ${word::-15}
done

Что я делаю не так?

Это вывод $(ps -ef | grep mgr)

ggate 53158 1 1 Sep04 ? 1-14:53:02 ./mgr PARAMFILE /gecici/GoldenGate/ggs12c/dirprm/mgr.prm REPORTFILE /gecici/GoldenGate/ggs12c/dirrpt/MGR.rpt PRO 
ggate 143867 32840 0 16:07 pts/5 00:00:00 grep --color=auto mgr 

1 Ответ

0 голосов
/ 07 декабря 2018

Если производительность не критична, следующий конвейер, который опирается на внешние исполняемые файлы, должен нормально работать:

ps -o cmd= | grep -Ewo '[^::space::]*mgr\.prm' | cut -c -15

ps -o cmd= просит ps только для отображения командных строк (без заголовка),grep фильтрует строки по тем, которые содержат слово, оканчивающееся на mgr.\prm, cut возвращает только первые 15 символов этого слова.

Обратите внимание, что флаг grep -w ord-regexpне определяется POSIX и, вероятно, не будет работать, если вы не используете GNU grep.В этом случае я рекомендую либо использовать grep с флагом аромата регулярного выражения -P CRE и добавить слово- \b raoundary в конец шаблона, либо добавить ( |$) в конец шаблона.

...