在egrep的正则表达式中管道bash输入参数

时间:2012-03-30 02:21:22

标签: regex bash variables grep

这是我正在尝试运行的脚本

#!/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

基本上我正在尝试编写一个脚本,它接受两个参数(wordlist,wordlength)并获取名词列表中的所有单词,这些单词由wordlist中的char组成,并且具有wordlength变量的长度。我想知道的是如何将bash变量放在egrep的正则表达式中作为字符串?

谢谢!

1 个答案:

答案 0 :(得分:3)

您需要将参数包装在双引号中,以便Bash不会尝试处理反斜杠,并在 {{1}之后将第二个\b移动到 }:

{${wordlength}}

(如果您运行cat ./nounlist | egrep "\b[${charlist}]{${wordlength}}\b" ,则会看到它只打印echo \b。这是因为Bash认为b是为了阻止\从有任何特殊意义;所以它删除它。)