(5) 정규 표현 식 과 파일 작업 - 특수 문자 와 POSIX 문자, sed 와 awk 명령 작업 등
31315 단어 Shell
특수 문자
1.1 위치 일치
위치 문자
속뜻
^
줄 끝 과 일치 합 니 다. ^ a 는 a 로 시작 합 니 다. 기본 닻 은 문자 로 정 합 니 다.
$
줄 의 첫 번 째 와 일치 합 니 다. a $는 a 로 끝 납 니 다. 기본 닻 은 문자 로 정 합 니 다.
aaasdc
a_c
abbbc
abbc
bcc
dddc
dc
aa
bbcc
aZc
abc
ac
da
ddb
asdfda
# 精确匹配
[marc@localhost Shell]$ egrep "^ac$" regular_expression_file
ac
# 模糊匹配
[marc@localhost Shell]$ egrep "^a" regular_expression_file
aaasdc
a_c
abbbc
abbc
aa
aZc
abc
ac
asdfda
[marc@localhost Shell]$ egrep "c$" regular_expression_file
aaasdc
a_c
abbbc
abbc
bcc
dddc
dc
bbcc
aZc
abc
ac
1.2 문자열 일치
특수 문자
속뜻
.
리 턴 을 제외 한 임의의 문자 와 일치 합 니 다.
( )
문자열 그룹
[ ]
괄호 안에 있 는 임의의 문자 와 일치 하 는 문자 클래스 를 정의 합 니 다.
[ ^ ]
괄호 안에 문자 이외 의 문자 가 나타 나 는 것 을 반대로 표시 합 니 다.
\
전의 문자
|
파이프
[marc@localhost Shell]$ egrep "^a.c$" regular_expression_file
a_c
aZc
abc
[marc@localhost Shell]$ egrep "^(a|d)c$" regular_expression_file
dc
ac
1.3 수량 한정 매 칭
수량 문자
속뜻
*
이전 문자 0 ~ 임 의 일치
+
이전 문자 1 ~ 임 의 일치
?
이전 문자 0 ~ 1 번 일치
{n,m}
이전 문자 n ~ m 회 일치
{n}
이전 문자 n 회 일치
[marc@localhost Shell]$ egrep "^ab*c$" regular_expression_file
abbbc
abbc
abc
ac
[marc@localhost Shell]$ egrep "^ab?c$" regular_expression_file
abc
ac
[marc@localhost Shell]$ egrep "^ab+c$" regular_expression_file
abbbc
abbc
abc
POSIX 문자
POSIX 문자
속뜻
[:alnum:]
임의의 숫자 알파벳 문자 0 - 9 a - z A - Z 일치
[:alpha:]
임의의 자모, 대문자 또는 소문 자 a - z A - Z 일치
[:digit:]
임의의 숫자 0 - 9 일치
[:graph:]
공백 문자 가 아 닌 공백 제어 문자 와 일치 합 니 다.
[:lower:]
소문 자 a - z 일치
[:upper:]
대문자 A - Z 일치
[:ctrl:]
일치 제어 문자
[:print:]
빈 칸 을 포함 하여 비어 있 지 않 은 문자 와 일치 합 니 다.
[:punct:]
일치 문장 부호
[:blank:]
공백 과 TAB 문자 일치
[:xdigit:]
16 진수 일치
[:space:]
모든 공백 문자, 새 줄, 빈 칸, 탭 문자 와 일치 합 니 다.
[marc@localhost Shell]$ egrep "^a[[:alnum:]]c$" regular_expression_file
aZc
abc
[marc@localhost Shell]$ egrep "^a[[:upper:]]c$" regular_expression_file
aZc
[marc@localhost Shell]$ egrep "^a[[:lower:]]c$" regular_expression_file
abc
[marc@localhost Shell]$ egrep "^a[[:alnum:]]*c$" regular_expression_file
aaasdc
abbbc
abbc
aZc
abc
ac
3. 셸 명령 의 파일 조작
3.1, sed 명령 - 줄 편집기
sed 명령 은 Linux 가 제공 하 는 외부 명령 으로 텍스트 를 직접 조작 하고 비 상호작용 적 으로 파일 을 증가, 삭제, 수정, 검사 등 작업 을 한다.사용 시 명령 행 에 편집 명령 을 입력 하고 파일 이름 을 지정 한 다음 화면 에서 출력 을 봅 니 다.텍스트 편집기 와 본질 적 인 차이 가 있 습 니 다.
3.1.1 sed 처리 데이터 원리
텍스트 의 한 줄
캐 시
데 이 터 는 캐 시 에서 처리 합 니 다.
컴퓨터 화면
* 8195, * 8195, * 8195, * 8195, * 8195, * 8195, * 8195, sed 는 텍스트 파일 에서 메모리 로 한 줄 을 읽 은 다음 메모리 에서 파일 을 수정 하고 수정 이 끝 난 후에 화면 에 인쇄 합 니 다.
3.1.2 sed 명령 문법
문법: sed [options] '{command} [flags]' [filename]
命令选项:
-e script 将脚本中指定的命令添加到处理输入时执行的命令中,多条件, 一行中要有多个条件 如: sed -e 's/brown/green/;s/dog/cat/' sed_file # 多条命令
-f filename 将处理文件时输入的执行命令添加到指定的文件中 如: sed -f command_file sed_file (command_file文件中包含了要执行的命令)
-n 抑制自动输出 如: sed -n '2,3s/dog/cat/p' sed_file # 只打印出有用内容
-i 编辑文件内容 如: sed -i 's/dog/cat/g' sed_file # 源文件被修改(不可逆)
-i.bak 修改时同时创建.bak备份文件 如: sed -i.bak 's/cat/dog/g' sed_file # 修改源文件的同时创建备份文件
-r 使用扩展的正则表达式 如: sed -n -r '/^(root)(.*)(bash)$/p' /etc/passwd
! 取反(跟在模式条件后与shell有所区别)
sed常用内部命令:
a 在匹配后面添加 如: sed '/3 the/a\hello world' sed_file # /3 the/ 表示匹配含有3 the的行,a表示行后面添加,hello world为要添加的内容
i 在匹配前面添加 如: sed '/3 the/i\hello world' sed_file
p 打印 如: sed '/3 the/p' sed_file # 第3行打印2遍,其余行打印一遍
d 删除 如: sed '/3 the/d' sed_file
s 直接替换 如: sed '2,4s/dog/cat/' sed_file # 将2-4行中的出现的第一个dog替换为cat ,可以添加g进行全局替换(行)
c 更改 如: sed '2,4c\hello world' sed_file # 直接将2-4行的所有内容替换为一行指定添加的内容
y 转换 N D P 如: sed 'y/acbdef/ABCXYZ/' sed_file
flags:对命令进行补充
数字 表示新文本替换的模式 如: sed 's/dog/cat/2' sed_file # 将每一行第2次出现的dog替换为cat
g 表示新文本替换现有文本的全部实例 如: sed '2,4s/dog/cat/g' sed_file # 全局替换, 将第2-4行出现的所有的dog全部替换为cat
p 表示打印原始的内容 如: sed '3s/dog/cat/p' sed_file # 替换的同时进行打印, 可以同时使用s///gp
w filename 将替换的结果写入文件 如: sed '2,4s/dog/cat/w m_file' sed_file # 将替换后的结果写入m_file文件中,系统会自动创建文件
3.1.3 sed 명령 예시 설명
프레젠테이션 파일 1:
1 the quick brown fox jumps over the lazy dog
2 the quick brown fox jumps over the lazy dog
3 the quick brown fox jumps over the lazy dog
4 the quick brown fox jumps over the lazy dog
5 the quick brown fox jumps over the lazy dog
########################### sed内部常用命令 ###################################
1) a 在匹配后面添加 —— 可以使用转义字符\将a与添加内容分隔开
[marc@localhost Shell]$ sed 'a\hello world' sed_file # 在每一行后面添加上hello world
1 the quick brown fox jumps over the lazy dog
hello world
2 the quick brown fox jumps over the lazy dog
hello world
3 the quick brown fox jumps over the lazy dog
hello world
4 the quick brown fox jumps over the lazy dog
hello world
5 the quick brown fox jumps over the lazy dog
hello world
[marc@localhost Shell]$ sed '3a\hello world' sed_file # 在第3行后面添加上hello world
1 the quick brown fox jumps over the lazy dog
2 the quick brown fox jumps over the lazy dog
3 the quick brown fox jumps over the lazy dog
hello world
4 the quick brown fox jumps over the lazy dog
5 the quick brown fox jumps over the lazy dog
[marc@localhost Shell]$ sed '2,4a\hello world' sed_file # 在第2-4行后面添加上hello world
1 the quick brown fox jumps over the lazy dog
2 the quick brown fox jumps over the lazy dog
hello world
3 the quick brown fox jumps over the lazy dog
hello world
4 the quick brown fox jumps over the lazy dog
hello world
5 the quick brown fox jumps over the lazy dog
[marc@localhost Shell]$ sed '/3 the/a\hello world' sed_file # 通过/ / 匹配,在第3行后面添加上hello world
1 the quick brown fox jumps over the lazy dog
2 the quick brown fox jumps over the lazy dog
3 the quick brown fox jumps over the lazy dog
hello world
4 the quick brown fox jumps over the lazy dog
5 the quick brown fox jumps over the lazy dog
2) i 在匹配前面添加 —— sed命令只改变输出在屏幕上的内容,原文本自身的并不发生改变
[marc@localhost Shell]$ sed 'i\hello world' sed_file
[marc@localhost Shell]$ sed '2i\hello world' sed_file
[marc@localhost Shell]$ sed '2,4i\hello world' sed_file
[marc@localhost Shell]$ sed '/3 the/i\hello world' sed_file
3) p 打印 —— 输出两遍内容, 打印一遍文件内容,同时又从缓存输出一遍
[marc@localhost Shell]$ sed 'p' sed_file
1 the quick brown fox jumps over the lazy dog
1 the quick brown fox jumps over the lazy dog
2 the quick brown fox jumps over the lazy dog
2 the quick brown fox jumps over the lazy dog
3 the quick brown fox jumps over the lazy dog
3 the quick brown fox jumps over the lazy dog
4 the quick brown fox jumps over the lazy dog
4 the quick brown fox jumps over the lazy dog
5 the quick brown fox jumps over the lazy dog
5 the quick brown fox jumps over the lazy dog
[marc@localhost Shell]$ sed '3p' sed_file
[marc@localhost Shell]$ sed '2,4p' sed_file # 第2-4行打印2遍,其余行打印一遍
[marc@localhost Shell]$ sed '/3 the/p' sed_file # 第3行打印2遍,其余行打印一遍
4) d 删除 —— 常使用匹配删除
[marc@localhost Shell]$ sed 'd' sed_file
[marc@localhost Shell]$ sed '3d' sed_file
[marc@localhost Shell]$ sed '2,4d' sed_file
[marc@localhost Shell]$ sed '/3 the/d' sed_file # 删除第3行
5) s 直接替换 —— 使用方法 s/ / /
[marc@localhost Shell]$ sed 's/dog/cat/' sed_file # 替换所有行中的dog
[marc@localhost Shell]$ sed '3s/dog/cat/' sed_file # 替换第3行中的dog
[marc@localhost Shell]$ sed '2,4s/dog/cat/' sed_file
[marc@localhost Shell]$ sed '/3 the/s/dog/cat/' sed_file # 先匹配第3行,在替换第3行中的dog
6) c 更改 —— 指定多行更改时,会直接将其看做一行进行更改
[marc@localhost Shell]$ sed 'c\hello world' sed_file
hello world
hello world
hello world
hello world
hello world
[marc@localhost Shell]$ sed '3c\hello world' sed_file
1 the quick brown fox jumps over the lazy dog
2 the quick brown fox jumps over the lazy dog
hello world
4 the quick brown fox jumps over the lazy dog
5 the quick brown fox jumps over the lazy dog
[marc@localhost Shell]$ sed '2,4c\hello world' sed_file # 直接将2-4行的所有内容替换为一行指定添加的内容
1 the quick brown fox jumps over the lazy dog
hello world
5 the quick brown fox jumps over the lazy dog
[marc@localhost Shell]$ sed '/3 the/c\hello world' sed_file # 先匹配,再更改
1 the quick brown fox jumps over the lazy dog
2 the quick brown fox jumps over the lazy dog
hello world
4 the quick brown fox jumps over the lazy dog
5 the quick brown fox jumps over the lazy dog
7) y 转换 —— 一一对应,且不能使用类似范围操作符的符号
[marc@localhost Shell]$ sed 'y/acbdef/ABCXYZ/' sed_file
1 thY quiBk Crown Zox jumps ovYr thY lAzy Xog
2 thY quiBk Crown Zox jumps ovYr thY lAzy Xog
3 thY quiBk Crown Zox jumps ovYr thY lAzy Xog
4 thY quiBk Crown Zox jumps ovYr thY lAzy Xog
5 thY quiBk Crown Zox jumps ovYr thY lAzy Xog
프레젠테이션 파일 2:
1 the quick brown fox jumps over the lazy dog,dog
2 the quick brown fox jumps over the lazy dog,dog
3 the quick brown fox jumps over the lazy dog,dog
4 the quick brown fox jumps over the lazy dog,dog
5 the quick brown fox jumps over the lazy dog,dog
############################### flags标志位用法 ##############################
1)[marc@localhost Shell]$ sed 's/dog/cat/2' sed_file # 数字
1 the quick brown fox jumps over the lazy dog,cat
2 the quick brown fox jumps over the lazy dog,cat
3 the quick brown fox jumps over the lazy dog,cat
4 the quick brown fox jumps over the lazy dog,cat
5 the quick brown fox jumps over the lazy dog,cat
2)[marc@localhost Shell]$ sed '3s/dog/cat/p' sed_file # p 打印
1 the quick brown fox jumps over the lazy dog,dog
2 the quick brown fox jumps over the lazy dog,dog
3 the quick brown fox jumps over the lazy cat,dog
3 the quick brown fox jumps over the lazy cat,dog
4 the quick brown fox jumps over the lazy dog,dog
5 the quick brown fox jumps over the lazy dog,dog
[marc@localhost Shell]$ sed 's/dog/cat/g' sed_file # g 全局替换
1 the quick brown fox jumps over the lazy cat,cat
2 the quick brown fox jumps over the lazy cat,cat
3 the quick brown fox jumps over the lazy cat,cat
4 the quick brown fox jumps over the lazy cat,cat
5 the quick brown fox jumps over the lazy cat,cat
[marc@localhost Shell]$ sed '2,4s/dog/cat/w m_file' sed_file # w filename 写入文件
1 the quick brown fox jumps over the lazy dog,dog
2 the quick brown fox jumps over the lazy cat,dog
3 the quick brown fox jumps over the lazy cat,dog
4 the quick brown fox jumps over the lazy cat,dog
5 the quick brown fox jumps over the lazy dog,dog
[marc@localhost Shell]$ cat m_file
2 the quick brown fox jumps over the lazy cat,dog
3 the quick brown fox jumps over the lazy cat,dog
4 the quick brown fox jumps over the lazy cat,dog
########################### 命令选项 #############################333
1) -n 抑制自动输出 —— 用于打印时避免不必要的输出
[marc@localhost Shell]$ sed -n '2,3s/dog/cat/p' sed_file # 只打印出有用内容
2 the quick brown fox jumps over the lazy cat,dog
3 the quick brown fox jumps over the lazy cat,dog
2) -e script 将脚本中指定的命令添加到处理输入时执行的命令中,多条件, 一行中要有多个条件
[marc@localhost Shell]$ sed -e 's/brown/green/;s/dog/cat/' sed_file # 多条命令
1 the quick green fox jumps over the lazy cat,dog
2 the quick green fox jumps over the lazy cat,dog
3 the quick green fox jumps over the lazy cat,dog
4 the quick green fox jumps over the lazy cat,dog
5 the quick green fox jumps over the lazy cat,dog
3)-f file_name 将处理文件时输入的执行命令添加到指定的文件中
[marc@localhost Shell]$ g command_file # 文件command_file中的内容即为:s/brown/green/;s/dog/cat/ 可改写成两行
[marc@localhost Shell]$ sed -f command_file sed_file
1 the quick green fox jumps over the lazy cat,dog
2 the quick green fox jumps over the lazy cat,dog
3 the quick green fox jumps over the lazy cat,dog
4 the quick green fox jumps over the lazy cat,dog
5 the quick green fox jumps over the lazy cat,dog
4) -i 修改源文件
[marc@localhost Shell]$ sed -i 's/dog/cat/g' sed_file # 源文件被修改(不可逆)
[marc@localhost Shell]$ cat sed_file
1 the quick brown fox jumps over the lazy cat,cat
2 the quick brown fox jumps over the lazy cat,cat
3 the quick brown fox jumps over the lazy cat,cat
4 the quick brown fox jumps over the lazy cat,cat
5 the quick brown fox jumps over the lazy cat,cat
5) -i.bak 修改源文件同时创建.bak备份文件
[marc@localhost Shell]$ sed -i.bak 's/cat/dog/g' sed_file # 修改源文件的同时创建备份文件
[marc@localhost Shell]$ ls
sed_file sed_file.bak
[marc@localhost Shell]$ cat sed_file.bak
1 the quick brown fox jumps over the lazy cat,cat
2 the quick brown fox jumps over the lazy cat,cat
3 the quick brown fox jumps over the lazy cat,cat
4 the quick brown fox jumps over the lazy cat,cat
5 the quick brown fox jumps over the lazy cat,cat
[marc@localhost Shell]$ cat sed_file
1 the quick brown fox jumps over the lazy dog,dog
2 the quick brown fox jumps over the lazy dog,dog
3 the quick brown fox jumps over the lazy dog,dog
4 the quick brown fox jumps over the lazy dog,dog
5 the quick brown fox jumps over the lazy dog,dog
6)-r 使用扩展的正则表达式 —— 元字符为标志
[marc@localhost Shell]$ sed -n -r '/^(root)(.*)(bash)$/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
3.1.3 sed 명령 기법
[marc@localhost Shell]$ echo "marc is cool" | sed 's/cool/wonderful/'
marc is wonderful
[marc@localhost Shell]$ sed -n '$=' sed_file
5
3.2 awk 명령 용법 - 줄 편집기
3.2.1 awk 기초 용법
* 8195 ° awk 명령 은 Linux 가 제공 하 는 외부 명령 으로 sed 와 달리 awk 명령 은 데이터 의 처리, 연산, 출력 을 실현 할 수 있 고 기능 이 매우 강하 다.awk 는 파일 의 모든 줄 이 하나의 기록 이 고 기록 과 기록 사이 의 구분자 가 줄 바 꿈 문자 라 고 생각 합 니 다.각 열 은 필드 입 니 다. 필드 와 필드 사이 의 구분 자 는 기본적으로 하나 이상 의 빈 칸 이나 Tab 탭 문자 입 니 다.
『 8195 』 실현 가능 한 기본 기능 은 다음 과 같다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Shell alias 명령에 별칭을 설정하는 방법명령에 별명을 설정하면 명령의'작은 이름'으로 삼을 수 있지만, 이렇게 하는 것이 무슨 의미가 있습니까? 이때 별명이 작용할 수 있다.vim 명령의 별명을vi라고 정의하면 이후에 실행된vi 명령은 실제로vim 명령을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.