Нужно ли для этого использовать sed
? grep
и perl
могут делать то, что вам нужно.
grep 'Build_Type\|docker_Name' environment-info.conf | perl -pe "s|docker_Name='(.*?)-.*|docker_Name=\1|" > build_version.txt
#!/bin/bash
myfile=''
mydir=''
parse_args() {
case "$1" in
-d)
mydir="$2"
;;
-f)
myfile="$2"
;;
*)
echo "Unknown or badly placed parameter '$1'." 1>&2
exit 1
;;
esac
}
while [[ "$#" -ge 2 ]]; do
parse_args "$1" "$2"
shift; shift
done
Существует getopts
стандартная (встроенная) утилита в оболочках POSIX для разбора аргументов командной строки.
Вы можете использовать этот шаблон:
#! /bin/sh -
PROGNAME=$0
usage() {
cat << EOF >&2
Usage: $PROGNAME [-v] [-d <dir>] [-f <file>]
-f <file>: ...
-d <dir>: ...
-v: ...
EOF
exit 1
}
dir=default_dir file=default_file verbose_level=0
while getopts d:f:v o; do
case $o in
(f) file=$OPTARG;;
(d) dir=$OPTARG;;
(v) verbose_level=$((verbose_level + 1));;
(*) usage
esac
done
shift "$((OPTIND - 1))"
echo Remaining arguments: "$@"
Который разбирает аргументы стандартным образом, как это делают другие стандартные команды. например, вы можете вызвать его так:
myscript -vvv -f file -d dir other arg
myscript -ffile -ddir -- other arg
Подробности см. в спецификации POSIX или в руководстве к вашей оболочке.