使用awk进行模式匹配

时间:2017-07-21 04:55:42

标签: regex linux awk sed

我有一个像这样的文件hoge.txt:

case $1 in
[ $input = "q" ] && exit
if [ -s $filename ]    
if [ ! -f $1 -o -f $2 ]
echo $list
rm -f ${BKDIR}
BKDIR=/${HOME}/backup

我想找到所有字母变量,排除所有参数,如" $ 1"并输出到这样的新文件:

$input
$filename
$list

我现在能做的最好的事情是

cat hoge.txt | awk '{for(i=1;i<=NF;i++){ if($i=="$/[a-zA-Z]/"){print $i} } }'

但它并没有返回任何结果。

1 个答案:

答案 0 :(得分:1)

您不需要使用Awk这样一个简单的例子,只需使用-E标志使用扩展正则表达式支持,并使用-o

grep -Eo '\$[a-zA-Z]+' file

生成

$input
$filename
$list

使用重定向(>)运算符

写入新文件
grep -Eo '\$[a-zA-Z]+' file > variablesList

(或)保存两个关键笔划(在下面的评论中建议)并启用不区分大小写的标记-i

grep -iEo '\$[a-z]+' file