трубопроводные входные аргументы bash в регулярном выражении egrep - PullRequest
2 голосов
/ 30 марта 2012

вот сценарий, который я пытаюсь запустить

#!/bin/bash

charlist=$1 #possible input:cat
wordlength=$2 #possible input: 3

cat ./nounlist | egrep \b[${charlist}]\b{${wordlength}}

вывод: ничего. # Должен был поймать следующее (используя командную строку)

$ cat nounlist | egrep "\b[cat]{3}\b"
act
cat's_cradle
cat
cat-o'-nine-tails
cat's-paw
Sno-cat
act
act
act
act
rat-a-tat-tat
cat
cat's-claw
cat's_foot
cat's-ear
cat's-tail
cat's-ear
cat's_eye

в основном япытаясь написать скрипт, который принимает два аргумента (список слов, длина слова) и извлекает все слова в существительном списке, которые состоят из символа в списке слов и имеют переменную длины слова.Я хочу знать, как поместить переменные bash в регулярное выражение egrep в виде строк?

Спасибо!

1 Ответ

3 голосов
/ 30 марта 2012

Вам нужно заключить аргумент в двойные кавычки, чтобы Bash не пытался обрабатывать обратную косую черту, и переместить второй \b в после {${wordlength}}:

cat ./nounlist | egrep "\b[${charlist}]{${wordlength}}\b"

(Если вы запустите echo \b, вы увидите, что он просто печатает b. Это потому, что Bash предполагает, что \ существует, чтобы не дать b иметь какое-либо особое значение; поэтому он удаляет его .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...