2014-11-20 67 views
0

我需要使用正则表达式找到一些文本并为它着色。正则表达式是我的脚本的一个参数。Bash - 找到正则表达式

所以我能为这个参数做到这一点:

./color_skript.sh 'hello' 

程序:

word=$1 
var=$(echo -e $line | grep $word | sed -e "s/${word}/${color}${word}${endColor}/g") 

它的工作原理,并在每一行发现 “你好”。但是,当我有这个参数:

./color_skript.sh 'hel[a-z]*\>' 

它应该找到每个字开始“hel”,并以任何字母结束。例如:“helaa”,“helab”,“helzz”等。

我该怎么做?

+0

http://mywiki.wooledge.org/BashGuide/Practices#Quoting – 2014-11-20 22:54:41

+1

当您运行'./color_skript.sh'hel [a-z] * \>''时,它目前的功能是什么? – DanielGibbs 2014-11-20 22:55:08

+0

它找到以字母“hel”开始的字符串,并且字符串的末尾可以是任何字符。因此,例如它会发现:“hello”,“helaa”,“helab”,“helxy”...... – Frenky 2014-11-20 23:02:26

回答

-1

sed之后的第二个${word}应该是&&告诉sed回应它先前匹配的模式。因此,如果$word'hel[a-z]*\>',则&sed的输出中为“hello”(例如)。

此外,我认为你不需要在sed之后-e

word=$1 
var=$(echo -e $line | grep $word | sed "s/${word}/${color}&${endColor}/g") 
1

grep本身是所有你想要的:

enter image description here

你可以找到man grep更多GREP_COLORS

+1

看起来他正在脚本中使用输出,所以'grep --color = always'可能会更好。当然,这比使用'sed'命令更简单。 – yellowantphil 2014-11-21 00:23:37