>  기사  >  웹 프론트엔드  >  정규식과 Linux의 세 가지 주요 텍스트 처리 도구 사용에 대한 자세한 설명

정규식과 Linux의 세 가지 주요 텍스트 처리 도구 사용에 대한 자세한 설명

php中世界最好的语言
php中世界最好的语言원래의
2018-03-29 13:58:191346검색

이번에는 정규식과 리눅스의 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 grep与正则表达式的使用

怎么用正则把字符串分组

위 내용은 정규식과 Linux의 세 가지 주요 텍스트 처리 도구 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.