어댑터 와 정규 표현 식 문자 의 이해 및 grep 의 인 스 턴 스 응용
7974 단어 Linux특수 기호표현 식Linux 운영 로그
通配符是Linux shell中用来描述(匹配)不确定字符的特殊符号.
구체 적 인 마스크 가 문 자 를 어떻게 묘사 하 는 지 볼 까요?
* 代表任意字符任意次数
? 代表任意单个字符0次或者1次
[] 代表括号中存在的任意单个字符
[!] 代表非括号中存在的任意单个字符
[^] 代表指定范围外的任意单个字符
[a-z] 代表所有单个小写字母
[A-Z] 代表所有单个大写字母
[:digit:]代表所有单个数字
[:upper:]代表所有单个大写字母
[:lower:]代表所有单个小写字母
[:alpha:]代表所有单个字母
[:blank:]代表水平空格或tab键
[:space:]代表空格
[:punct:]代表标点符号
[:xdigit:]代表十六进制
어댑터 * 의 응용:
[root@localhost rc.d]# ls #列出此目录下的所有内容
init.d rc0.d rc2.d rc4.d rc6.d rc.sysinit
rc rc1.d rc3.d rc5.d rc.local
[root@localhost rc.d]# ls rc.* #列出此目录下所有以rc.开头任意长度字符结尾的文件
rc.local rc.sysinit
어댑터의 응용 프로그램:
[root@localhost rc.d]# ls r? #列出以r开头后面紧跟任意单个字符结尾,可与*对照之
rc
어댑터 [] 의 응용:
[root@localhost rc.d]# mkdir b #创建目录b
[root@localhost rc.d]# ls #查看目录内容
b rc rc1.d rc3.d rc5.d rc.local
init.d rc0.d rc2.d rc4.d rc6.d rc.sysinit
[root@localhost rc.d]# ls -d [ib]* #以i或者b开头的目录
b init.d
注意的是: [[?*\] 指的是匹配"[","?","\","三个字符中的一个并不代表通配符
[][!] 指的同样也是中间的三个字符
어댑터 [!] 의 응용:
[root@localhost rc.d]# ls -d [!ib]* #i或者b开头的目录
rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinit
어댑터 [^] 의 응용:
效果与[!]相同
어댑터 [: alpha:] 의 응용
效果类似于[]基本相似,只不过匹配内容是描述符所描述的含义
셸 의 어댑터 와 다른 설명자 가 있 습 니까?
정규 표현 식 의 문 자 는 두 가지 로 나 눌 수 있 습 니 다. 텍스트 문자 와 메타 문자 입 니 다. 정규 표현 식 은 기본 정규 표현 식 과 확장 정규 표현 식 으로 나 눌 수 있 습 니 다.
* centos 정규 표현 식 의 지원 은 perl PCR 모듈 에 의존 합 니 다.
메타 문자 (metacharacter): 정규 표현 식 에서 특별한 의 미 를 가 진 문자 로 정규 표현 식 이 파일 처리 능력 을 가지 게 합 니 다.
1. 문자 자체 설명
\ 转义字符(跳脱字符)其后的字符还原为本来的含义,不做特殊字符
. 代表任意单个字符
[] 代表括号中指定的任意单个字符
[^] 代表除括号中指定的任意单个字符
[:alnum:]代表所有的数字和字母中的任意单个字符
[:digit:]代表所有数字中的任意单个字符
[:alpha:]代表所有英文字母中的任意单个字符
[:lower:]代表所有小写英文字母中的任意单个字符
[:upper:]代表所有大写英文字母中的任意单个字符
[:space:]代表空格
[:punct:]代表标点符号
[:blank:]代表水平空格或tab键
2. 문자 발생 횟수 설명
基本正则:
* 代表前面单个字符或字符串(分组)出现任意次
\? 代表前面单个字符或字符串(分组)出现零次或一次
\+ 代表前面单个字符或字符串(分组)出现至少一次
\{n\} 代表前面单个字符或字符串(分组)出现n次
\{m,n\} 代表前面单个字符或字符串(分组)至少出现m次至多出现n次
\{m,\} 代表前面单个字符或字符串(分组)至少出现m次多则不限
\{,n\} 代表前面单个字符或字符串(分组)至多出现n次少则不限
扩展正则:
* 代表前面单个字符或字符串(分组)出现任意次
? 代表前面单个字符或字符串(分组)出现零次或一次
+ 代表前面单个字符或字符串(分组)出现至少一次
{n} 代表前面单个字符或字符串(分组)出现n次
{m,n} 代表前面单个字符或字符串(分组)至少出现m次至多出现n次
{m,} 代表前面单个字符或字符串(分组)至少出现m次多则不限
{,n} 代表前面单个字符或字符串(分组)至多出现n次少则不限
3. 문자 의 위치 설명 (위치 고정)
^ 代表以紧跟其后的字符开头的行
$ 代表以紧跟其后的字符结尾的行
\ 代表以紧跟其后的字符或字符串做单词的结尾
\ 代表以中间字符或字符串为整个单词
\b \b 是\c \>的另一种表示方法
分组 () 多个字符括起来作为一个整体字符串使用
几个常用组合:
^$代表空行
.*代表任意字符出现任意次
grep 명령 간단 한 용법: 텍스트 에 필요 한 키 워드 를 검색 합 니 다.
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
-i 忽略关键字大小写
-n 显示搜索到的内容在原文件中的行
-v 取反显示;显示没有匹配到的行
-c 显示匹配到内容多少行
-o 仅显示匹配到的字符串
-An 显示匹配到的内容的行及后n行
-Bn 显示匹配到的内容的行及前n行
-Cn 显示匹配到的内容的行及前后n行
-e 指定多个关键字
grep -e "root" -e "ntp" /etc/passwd
-w 显示匹配到内容的单词数
-E 使用扩展的正则表达式相当于egrep
메타 문자 적용:
1./etc/rc. d/rc. local 의\# 시작 과 빈 줄 을 삭제 합 니까?
[root@localhost rc.d]# cat rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
[root@localhost rc.d]# cat rc.local | egrep -v ^$ | grep -v ^#
touch /var/lock/subsys/local
简化:
[root@localhost rc.d]# cat rc.local | grep -v -E "^#|^$"
touch /var/lock/subsys/local
2. ifconfig 의 ip 주소 꺼 내기
[root@localhost rc.d]# ifconfig | egrep -o -E \([0-2]?[0-9]?[0-9]\.\){3}[0-9]+|head -1
172.16.253.171
简化:
[root@localhost rc.d]# ifconfig | egrep -o "([0-9]+\.){3}[0-9]+"|head -1
172.16.253.171
另一种方法:
[root@localhost rc.d]# ifconfig|grep "inet addr" | cut -d: -f2 | cut -d" " -f1|
head -1
172.16.253.171
3./etc/passwd 에서 사용자 이름과 셸 밍 이 같은 것 을 찾 습 니까?
[root@localhost rc.d]# cat /etc/passwd |grep --color=auto -E "(^[[:alnum:]]+):.*\1$"
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
4./var 디 렉 터 리 에 있 는. log 로 끝 나 는 모든 파일 의 경 로 를 찾 습 니까?
[root@localhost rc.d]# find /var -name *.log | grep -o -E "/.*/" | uniq
/var/log/audit/
/var/log/gdm/
/var/log/tuned/
/var/log/anaconda/
/var/log/
/var/log/mariadb/
/var/log/
5.....................................................................
[root@localhost rc.d]# find /var -name *.log # 查找出/var下所有的.log结尾的文件
/var/log/audit/audit.log
/var/log/gdm/:1.log
/var/log/gdm/:0-greeter.log
/var/log/gdm/:0.log
/var/log/tuned/tuned.log
/var/log/anaconda/anaconda.log
/var/log/anaconda/X.log
/var/log/anaconda/program.log
/var/log/anaconda/packaging.log
/var/log/anaconda/storage.log
/var/log/anaconda/ifcfg.log
/var/log/anaconda/ks-script-jwlu_8.log
/var/log/anaconda/journal.log
/var/log/vmware-vmsvc.log
/var/log/Xorg.9.log
/var/log/wpa_supplicant.log
/var/log/yum.log
/var/log/vmware-vmusr.log
/var/log/mariadb/mariadb.log
/var/log/Xorg.0.log
/var/log/pm-suspend.log
/var/log/pm-powersave.log
/var/log/boot.log
[root@localhost rc.d]# find /var -name *.log | grep -o -E "[^/]*$" #正则取出基名
audit.log
:1.log
:0-greeter.log
:0.log
tuned.log
anaconda.log
X.log
program.log
packaging.log
storage.log
ifcfg.log
ks-script-jwlu_8.log
journal.log
vmware-vmsvc.log
Xorg.9.log
wpa_supplicant.log
yum.log
vmware-vmusr.log
mariadb.log
Xorg.0.log
pm-suspend.log
pm-powersave.log
boot.log
6./proc/meminfo 파일 에서 대문자 나 소문 자로 시작 하 는 모든 줄 을 찾 습 니 다. 두 가지 방식:
[root@localhost rc.d]# cat /proc/meminfo |grep -E "^[s|S].*"
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 9132 kB
Slab: 148756 kB
SReclaimable: 88588 kB
SUnreclaim: 60168 kB
[root@localhost rc.d]# cat /proc/meminfo |egrep -i "^s.*"
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 9132 kB
Slab: 148756 kB
SReclaimable: 88588 kB
SUnreclaim: 60168 kB
7./sbin/nologin 을 셸 로 하지 않 는 사용 자 를 검색 하고 이 사용자 정보 가 원본 파일 에 있 는 줄 번 호 를 표시 합 니까?
[root@localhost ~]# egrep -n -v "\
8.检索shutdown用户,并显示上下1行的内容?
[root@localhost logs]# egrep -C1 "^shutdown" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
9. 주 ID (UID), 그룹 ID (GID) 와 같은 사용 자 를 검색 합 니까? [root@localhost logs]# egrep "\:\1" /etc/passwd|cut -d: -f1
root
bin
daemon
nobody
systemd-bus-proxy
systemd-network
dbus
abrt
tss
rpc
usbmuxd
잘못 이 있 으 면 잘 부탁드립니다.
'구시 가지 소설' 의 개인 블 로그:http://cityx.blogcitys.com
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바이너리 파일cat 또는tail, 터미널 디코딩 시 처리 방법
cat으로 바이너리 파일을 보려고 할 때 코드가 엉망이 되어 식은땀이 났다.
웹에서 스크롤된 정보의 처리 방법과alias의 설정을 요약합니다.
reset 명령을 사용하여 터미널을 재설정합니다.이렇게 하면 고치지 못하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.