Определите «$», за которым сразу следуют только буквы алфавита / цифры - PullRequest
0 голосов
/ 28 июня 2019

"$" не должно сразу сопровождаться цифрами [0-9].Должен отображаться только вывод - «$», за которым сразу следует алфавит / буквенно-цифровой / буквенный символ.

Ввод: dirname $0/../bin/$12JAVA_INV/$FILE12NAME

Ввод: $FILE12NAME

grep -o '[$][a-zA-z_]*'

Используя это, я получаю вывод как: $ $ $FILENAME

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Вы получаете $ в результате, потому что * означает совпадение ноль или более от предыдущего шаблона.$0 соответствует, потому что имеет $, за которым следуют 0 букв.Если вам нужна хотя бы одна буква, используйте + вместо этого, это означает один или более.

Но если вы хотите иметь возможность сопоставить $FILE12NAME, вам также необходимо разрешитьцифры после первого символа.Поэтому используйте:

grep -i -o '\$[a-z_][a-z_0-9]*'

Это соответствует $, за которым следуют буква или подчеркивание, за которыми следуют ноль или более букв, подчеркиваний или цифр.

0 голосов
/ 28 июня 2019

Похоже, что вы хотите:

$ echo 'dirname $0/../bin/$12JAVA_INV/$FILE12NAME' | awk '{print $NF}' FS=/
$FILE12NAME

Но если вы действительно хотите разобрать это так, как вы описываете, вы можете сделать одно из:

$ echo 'dirname $0/../bin/$12JAVA_INV/$FILE12NAME' | sed -e 's/.*\(\$[^0-9]\)/\1/'
$FILE12NAME
$ echo 'dirname $0/../bin/$12JAVA_INV/$FILE12NAME' | sed -E 's/.*(\$[^0-9])/\1/'
$FILE12NAME
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...