이번에는 정규식과 리눅스의 3대 텍스트 처리 도구에 대한 자세한 설명을 가져오겠습니다. 정규식과 리눅스의 3대 텍스트 처리 도구를 사용할 때 주의사항은 무엇입니까? 실제 사례를 살펴보겠습니다.
grep, sed 및 awk는 모두 텍스트 처리 도구이지만 모두 고유한 장점과 단점이 있습니다. 하나의 텍스트 처리 명령을 다른 명령으로 완전히 대체할 수 없습니다. 그렇지 않으면 세 개의 텍스트가 없습니다. 처리됨.
1. 정규식
1. 일치하는 문자 유형
[a-z]: 소문자
[A-Z]: 대문자
[a-Z]: 소문자 또는 대문자
[0-9]: 숫자
[a-zA-Z0-9]: 문자 또는 숫자
인 문자와 일치합니다. : 공백을 제외한 임의의 문자 1개와 일치합니다.
[0-f]: 16 기본 숫자
abc | def: abc 또는 def
a (bc | de) f: abcf 또는 adef
<: 첫 번째 단어는 일반적으로 공백이나 특수 문자로 구분되며 연속되는 문자열은 단어로
>: 단어 끝
[^표현]: 소문자를 제외한 모든 문자 등.
2 다음 기호는 일치 수를 제어합니다.
해당 기호의 왼쪽에는 위의 첫 번째 지점에 표현식이 있어야 합니다.
표현*: 0 또는 n 문자
표현+: 1 또는 n 문자
expression?: 0 또는 1자
expression{n}: n자
expression{n:m}: n ~ m자
expression{n,}: n자 이상
[예] [ a-z]*는 0개 이상의 소문자 일치를 의미합니다.
3. 일치하는 문자를 머리와 꼬리로 제어합니다.
^ 표현식: 머리가 일치합니다.
표현식 $: 꼬리가 일치합니다.
2. Linux
1. egrep 필터링 도구
grep의 확장 버전으로 정규 표현식을 사용할 수 있습니다.
구문:
egrep - 옵션 '정규 표현식' 파일 이름
옵션:
-n: 줄 번호 표시
-o: 일치하는 내용만 표시
-q: 자동 모드, 출력 없음, 실행 성공 여부, 즉 원하는 내용이 필터링되는지 확인하려면 $?를 사용해야 함
-l: 일치에 성공하면 파일 이름만 인쇄됩니다. 실패하면 일반적으로 -rl을 함께 사용합니다. grep -rl 'root' /etc
-A: 일치에 성공하면 일치하는 줄이 표시됩니다. 그러면 다음이 인쇄됩니다. n 줄을 함께 인쇄합니다.
-B: 일치하는 줄과 그 전후의 n 줄을 함께 인쇄합니다.
-C: 일치하는 경우 일치하는 줄과 다음을 인쇄합니다. 앞뒤 n줄을 함께
--color
-c: 일치하면 일치하는 줄 수를 출력합니다.
-i: 대소문자 무시
-v: 부정, 일치하지 않음
-w: 단어 일치
2, sed streamEditor
문법:
구문 1: sed - 옵션 '숫자 위치 지정 + 명령' 파일 이름
옵션:
-n: 자동 모드, 출력 없음
-e: 다중 편집 , 이는 명확하지 않습니다.
-i: 출력 대신 파일 내용을 직접 수정합니다.
-r: 확장 모드, 정규 표현식을 사용할 수 있습니다.
-f: 파일 이름을 지정하고 새 파일에 작업을 작성합니다.
명령:
a ∶ Append,
c ∶ 변경 변경,
d ∶ 삭제 삭제,
i ∶ 삽입, i 뒤에 문자열이 올 수 있으며 이 문자열은 새 줄(현재는 이전 줄)에 나타납니다.
p∶ 인쇄 인쇄
s∶ 교체교체, 교체작업을 직접 진행하실 수 있습니다. 일반적으로 이 작업은 정규식과 짝을 이룰 수 있습니다. 예를 들어 1,20s/old/new/g
*s 명령 특별 지침:
여러 명령을 추가하려면 {Command 1: Command 2: Command 3}을 사용하세요
语法2:sed -r '替换命令s/正则表达式/替换内容/贪婪选项g' 文件名
定位的两种方法:
①数字定位(输入行序号定位)
十进制数
1:单行
1,3:范围 从第一行到第三行
2,+4:匹配行后若干行
4,~3:从第四行到下一个3的倍数行
2~3:第二行起每间隔三行的行
$:尾行
1!:除了第一行以外的行
【例】sed -n '1p' /etc/passwd
②正则表达式定位
正则必须用//包裹起来
扩展正则需要用 -r 参数或转义
替换可使用正则表达式的子模式,即小括号(),可以\1、\2代表子模式
【例】sed -r 's/(.)(.)/\2\1/ file1 表示将匹配到的第一部分和第二部分替换
*贪婪选项:填上g,代表把一行中所有匹配项替换
3、awk 文本分析工具
由命令、正则(需要用//包围起来)、比较和关系运算组合而成
使用option中的-F参数定义间隔符号
用$1,$2,$3等的顺序表示files中每行以间隔符号分隔的各列不同域,NF变量表示当前记录的字段数
语法
awk -选项 参数 '逻辑判断{命令 变量1,变量2,变量3}' 文件名
选项
-F 定义字段分隔符,默认的分隔符是连续的空格或制表符
-v 定义变量并赋值 也可以借用次方式从shell变量中引入
AWK变量
NR 当前记录的个数(全部文件连接后的统计)
FNR 当前记录的个数(仅为当前文件的统计,非全部)
FS 字段分隔符 默认为连续空格或制表符,可以使用多个不同的符号做分隔符 -F[:/]
OFS 输出字符的分隔符 默认是空格
# awk -F: 'OFS="=====" {print $1,$2}' /etc/passwd
root=====x
NF 当前读入行的字段个数
ORS 输出记录分隔符 默认是换行
# awk -F: 'ORS="=====" {print $1,$2}' /etc/passwd
root x=====bin x=====
FILENAME 当前文件名
【例1】使用AWK变量
# awk '{print NR,FNR,$1}' file1 file2 1 1 aaaaa 2 2 bbbbb 3 3 ccccc 4 1 dddddd 5 2 eeeeee 6 3 ffffff #
【例2】引用shell变量的方法
# a=root # awk -v var=$a -F: '$1 == var {print $0}' /etc/passwd 或者 把整个命令拆开传递,让shell变量外露, # awk -F: '$1 == "'$a'" {print $0}' /etc/passwd # a=NF # awk -F: '{print $'$a'}' /etc/passwd
逻辑运算(可直接引用域进行运算)
= += -= /= *= 赋值
&& || ! 逻辑与 逻辑或 逻辑非
~ !~ 匹配正则或不匹配,正则需要用 /正则/ 包围住
< <= > >= != == 关系 比较字符串时要把字符串用双引号引起来
$ 字段引用:字段引用需要加$,而变量引用直接用变量名取
+ - * / % ++ -- 运算符
转义序列
\\ \自身
\$ 转义$
\t 制表符
\b 退格符
\r 回车符
\n 换行符
\c 取消换行
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
위 내용은 정규식과 Linux의 세 가지 주요 텍스트 처리 도구 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!