linux正则表达式简介

来源:互联网 发布:如何成为一名黑客 知乎 编辑:程序博客网 时间:2024/05/16 19:42

正则表达式的应用

正则表达式是用来处理字串的一种工具,和bash一样重要,是学习linux的人通二脉。
举个例子:grep命令
去你的~/.bashrc 文件中加入alias grep='grep --color=auto',这样你grep是高亮的。

例子1 查网卡信息
dmesg | grep -n -A3 -B2 'eth'

例子2 查文件中的信息
grep -n 'the' test.txt  //从刚刚的文件当中取得 the 这个特定字串
grep -vn 'the' test.txt //当该行没有 'the' 这个字串时才显示在萤幕上
grep -in 'the' test.txt //想要取得不论大小写的 the

grep -n 't[ae]st' test.txt // 搜寻 test 或 taste 这两个单字时
grep -n '[^g]oo' test.txt // oo前面不可以是g
grep -n '[^a-z]oo' test.txt // oo前面不可以是小写字母
grep -n '^the' test.txt // the在行首
grep -n '^[^a-z]' test.txt // 不是以小写字母为行首的行

grep -n '\.$' test.txt // 以.结尾的行,\相当于转义字符

grep -n '^$' test.txt // 空行

# grep -v '^$' /etc/syslog.conf | grep -v '^#'
# 结果仅有 10 行,其中第一个『 -v '^$' 』代表『不要空白行』,
# 第二个『 -v '^#' 』代表『不要开头是 # 的那行』喔!

【注意】
那个 ^ 符号,在字节集合符号(括号[])之内与之外是不同的! 在 [] 内代表『反向选择』,在 [] 之外则代表定位在行首的意义!
$表示结尾(window下是^M$,而linux下结尾才是$)
. (小数点):代表『一定有一个任意字节』的意思;
* (星星号):代表『重复前一个字节, 0 到无穷多次』的意思,为组合形态
特别注意:因为 * 代表的是『重复 0 个或多个前面的 RE 字符』的意义, 因此,『o*』代表的是:『拥有空字节或一个 o 以上的字节』
sed 's/要被取代的字串/新的字串/g'


实例:删除程序中的注释的正则表达式应用 rmnodeofcode.sh

#!/bin/bash

#delcomment.sh
#function: this shell script delete the comment in c/c++ source file


function del_comment_file()
{
#delete the comment line begin with '//comment'
 sed -i "/^[ \t]*\/\//d" $file

#delete the commnet line end with '//comment'
  sed -i "s/\/\/[^\"]*//" $file

#delete the comment only occupied one line ''
  sed -i "s/\/\*.*\*\///" $file

#delete the comment that occupied many lines '
  sed -i "/^[ \t]*\/\*/,/.*\*\//d" $file

}

function del_comment()
{
 for file in `ls `; do
   case $file in
    *.c)
    del_comment_file
    ;;
 *.cpp)
  del_comment_file
  ;;
 *.h)
  del_comment_file
  ;;
 *)
  if [ -d $file ]; then
    cd $file
     del_comment
     cd ..
     fi
     ;;
 esac
  done
}


DIR=$1

if [ ! -e $DIR ]; then
echo "The file or directory does not exist."
exit 1;
fi

if [ -f $DIR ]; then
file=`basename $DIR`
if [[ `echo $DIR | grep /` == $DIR ]]; then
cd `echo $DIR | sed -e "s/$file//"`
del_comment_file
else
del_comment_file
fi

exit 0;
fi

if [ -d $DIR ]; then
cd $DIR
del_comment  
exit 0;
fi

原创粉丝点击