linux grep 正则表达式
命令别名设置
惯用命令特别长的时候可以起一个别名
查看有哪些别名
#alias
#alias rm='rm -i'
去掉命令别名
#unalias lm
grep 可以解析一行文字,取得关键字,若该行存在关键字,就会整行列出来。
grep [-acinv] [--color=auto] '搜索字符串' filename
-a:将binary文件以text文件的方式搜寻数据
-c:计算找到'搜索字符串'的次数
-i:忽略大小写的不同,所以大小写视为相同
-n:输出行号
-v:反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
#grep -n root /etc/passwd
当前目录下找出jsen 或者json
#grep -n js[eo]n *
正则表达式
[] :匹配[]内字符,它只代表某“一个”字符,可以是一个单字符,也可以是字符序列。可以使用 - 表示[]内字符序列范围,如用[1-5]代替[12345]
^word :待查找的字符串(word)在行首 例子:grep -n '^#' test.txt (查找行首为#开始的那一行,并列出行号)
word$:待查找的字符串word在行尾
\ :转义字符,将特殊符号的特殊意义去除 例:grep -n \' test.txt 查找含义单引号'的那一行
[^]:反向选择,
[^g]oo:不想要oo前面有g
. (小数点): 代表一定有一个任意字符的意思
* (星号) : 代表重复零个到无穷多个的前一个字符
\{n,m}\ 连续n到m个的前一个RE字符,若为\{n}\则是连续n个的前一个RE字符,若为\{n\}\则是连续n个以上的前一个RE字符
grep -n 'go\{2,3}\'g test.txt 在g与g之间有2到3个o存在的字符串
#grep -n [^g]oo test.txt
oo前面不想要有小写字符
#grep -n [^a-z]oo test.txt
取得有数字的那一行
#grep -n [0-9] test.text
the 只在行首列出
#grep -n '^the' test.txt
oo前面不想要小写字符
#grep -n [^a-z]oo test.txt
开头是小写字符的那一行
#grep -n ^[a-z]oo test.txt
或
#grep -n '^[[:lower:]]' test.txt
找出行尾结束为小数点(.)的那行
#grep -n '\.$' test.txt
\为转义字符
空白行 (命令不起作用)
#grep -n '^$' test.txt
不要是#的那行
grep -v '^#'
找出g??d的字符,即共有4个字符
grep -n 'g..d' test.txt
查找前面至少有一个o字符
grep -n 'oo*' test.txt
开头与结尾都是g,但是两个g之间仅能存在至少一个o
grep -n 'goo*g' test.test
grep -n 'g*g'
开头结尾都是g
grep -n 'g.*g'
任意数字行
grep -n '[0-9][0-9]*' test.txt
练习两个o字符串
grep -n 'o\{2}\'
{} 在shell有特殊意义,因此需要使用转义字符让它失去特殊意义字符
g后面接2到5个o
grep -n 'go\{2,5}\' test.txt
列出连接文件标头会是'lrwxrwxrwx'
#ls -l /etc | grep '^|'
sed awk 工具
sed 可以分享 standard input ,而且可以将数据进行替换、删除、新增、选取特定行的功能
#nl /etc/passwd | sed '2,5d'
删除2到5行