Una variante sh
, y eliminaría los problemas asociados con ${var,,}
que usa la configuración regional para convertir cadenas (minúsculas I
no es i
para todos, por ejemplo):
#! /bin/sh -
while true; do
printf %s "Please enter your choice (stringA or stringB): "
IFS= read -r result || exit # exit on EOF
case $result in
([sS][tT][rR][iI][nN][gG][aAbB]) break
esac
echo >&2 Invalid choice.
done
Если вы хотите заменить шаблон, вы можете использовать sed -E
или экранировать символы +
, как предлагает @Kusalananda:
$ printf '"123.456"\n"909,999"\n"100"\n' | sed -E 's/"[0-9]+,[0-9]+"//g'
"123.456"
"100"
или
$ printf '"123.456"\n"909,999"\n"100"\n' | sed 's/"[0-9]\+,[0-9]\+"//g'
"123.456"
"100"
Обратите внимание, что в этом примере g
не требуется, так как в каждой строке есть только одна замена.
Если вы хотите удалить совпадающую строку (с ), вы можете использовать d
для удаления пространства шаблона :
$ printf '"123.456"\n"909,999"\n"100"\n' | sed '/"[0-9]\+,[0-9]\+"/d'
"123.456"
"100"