RE正規表現とgrep、awkのとsedのツール詳しい使い方

1.何が正規表現です

人気は、この方法は、正規表現文字列を扱うことで、彼は特別なシンボルの数によって支援行動文字列、正規表現、の単位で処理することで、簡単にユーザーが検索/削除」を実現できます/代わりに特定の文字列ハンドラ」の!実質的に規則的な表現「表現」、長い工具はこの表現をサポートしているとしてとしては、プログラムが使用する正規表現を扱うツールストリングとして使用することができます。これらのツールは、プロセスの文字列に正規表現で特殊文字を使用できるように、彼らは、正規表現をサポートする必要があるため、viなど、grepが、awkは、はるかにsedのと。しかしなどのcp、lsの、あなただけのワイルドカードバッシュ自体のみを使用できるように命令、正規表現をサポートしていません。

2. REの文字と特殊記号

1.特殊記号
特殊記号 代表意味
[:すくい] Z-Z - 、すべて大文字と小文字と数字、すなわち0-9 Aを表します
[:アルファ:] いずれの場合でも、英語の文字を表す、すなわち、A-Zは、A-Z
[下部:] 代表小文字の文字、すなわち、A-Z
[:アッパー:] 大文字の英語の文字の代わりに、すなわち、Z
[:桁:] それは、ある数を表し、0-9
[:ブランク:] Tabキーまたはスペースキーの代わりに
[:CNTRL:] デルなどCR、LF、タブ、:それはのようなキーボードのすべてのキーを表します
[:グラフ:] 他のキーとスペースキー、Tabキーの代表に加え、
[:印刷:] それは、次のような句読点を表し:「」;と#1 $そう!
[:スペース:] など、スペースキー、タブ、CR、:これは、任意の文字のような白鍵を生成することができ表し
[:XDIGIT] 含む、16ビットのデジタル型に代表:0-9、AF、AF数字

注意:前五条是常用的,其它一般不怎么用或者能用其它方式代替

例2.特殊記号

私たちは、データのいくつかの例を見つけるためにオンラインで行きます

Hello! / Hi!
Good-bye, "Mike".
See you tomorrow.
It’s time for class.
Open your books and turn to page 20.
Could you say it again? 
Where’s the company? 
Which is the right size? 
Do you know where I’ve put my glasses? 
Is this your pen? I found it under the desk. 
Which is your bag? 
The one on your right. 
Are these books all yours? 
She must be a model, isn’t she? 
I really don’t known.
#I have no idea about it.
What’s your family name?
Rose, let me introduce my friend to you.
Nice to meet you, too.
toooooot 
What day is it today?
It’s January the 15th, 1999.
It’s the year of 1999.
However, this dress is about $ 3183 dollars.
我们将数据写入一个文件里面
[root@localhost tmp]# vim test.text

スタートマッチング

[root@localhost tmp]# grep "[:alnum:]" test.text         #我们不能直接使用这些特殊符号
grep: 字符类的语法是 [[:space:]],而非 [:space:]
[root@localhost tmp]# grep "[[:alnum:]]" test.text        #我们需要用[]将其括起来

ここに画像を挿入説明

3.RE文字と使用
REの文字 意味と使用例
^ 意味:行の先頭を一致させます
[root@localhost tmp]# grep -n '^#' test.text      #匹配到以#开头的行,并打印出行号
-n 参数表示显示行号

ここに画像を挿入説明

REの文字 意味と使用例
$ マッチする行の末尾:意味
[root@localhost tmp]# grep -n '!$' test.text      #匹配到以#开头的行,并打印出行号

ここに画像を挿入説明

REの文字 意味と使用例
意味:任意の文字を
[root@localhost tmp]# grep -n 'e.e' test.text      
#匹配到的字符串可以是(ere)(eve),就是两个e中间一定有且仅有一个其它字符,空字符也算。
#但不能是(ee) 如:See you tomorrow.  See虽然有两个e,但是不符合就没有出现

ここに画像を挿入説明

REの文字 意味と使用例
\ 意味:エスケープ文字を、特殊記号の特別な意味を取り除きます
[root@localhost tmp]# grep -n '\$' test.text     
#    $   本来是匹配结尾的但是这里转义就能匹配到

ここに画像を挿入説明

REの文字 意味と使用例
* 意味:文字が無限回に以前のゼロを繰り返します
[root@localhost tmp]# grep -n 'to*' test.text   
#  匹配到单个t(零次o) 匹配到too (多次o)  

ここに画像を挿入説明

REの文字 意味と使用例
[] 意味:[]内部に一致する文字を表し
[root@localhost tmp]# grep -n 'o[nmt]' test.text  
# [nmt]代表n或m或t 所以会匹配到(on)(om)(ot)  

ここに画像を挿入説明

[root@localhost tmp]# grep -n '[0-9]' test.text  
#[0-9]就相当于[0123456789]   

ここに画像を挿入説明

REの文字 意味と使用例
[^] 意味:内部以外の文字と一致したことを
[root@localhost tmp]# grep -n 'on[^e]' test.text 
#[^e] 表示除了e之外其它字符都可以即匹配不到one
#空字符也算

ここに画像を挿入説明

REの文字 意味と使用例
{N、M} 意味:mまで繰り返される前に、文字をn回
[root@localhost tmp]# grep -n 'to\{1,3\}' test.text 
#重复o 一到三次
#要跟* 区分 *表示重复零次到无穷多次

ここに画像を挿入説明
ここに画像を挿入説明

3.grep

パラメータの定期的なミックスの一部に1.grepの話
-A   n  	把匹配成功行之后的n行也同时列出。 A 就是 after 的首字母就是之后的意思
-B   n  	把匹配成功行之前的n行也同时列出。B 就是 before 的首字母就是之前的意思
-C  n  	把匹配成功行的前后n行也同时列出。
-o   		只显示匹配到的字符
-c   		统计数量    (一般是跟其它参数一起用)
-n   		显示行号     (前面说过了)
-l			只要文件名   
2.gerpは、通常の拡張しました

拡張正規必見のegrepを持つやgrep -E

REの文字 意味と使用例
+ 意味:前の文字が何度も1回以上繰り返され、
意味:前の文字がゼロまたは1つの繰り返しを
| 意味:表し、または
() 意味:グループ文字列
()+ 意味:文字列のグループが1回以上繰り返す前に、
这里面+  和 ?  我就不多说了,注意要比较和* 的区别
而 |  的用法也特别简单比如:
 [root@localhost tmp]# echo "tooooabsdsadooo"  | grep -E 'too|ab'     #表示匹配too或者ab
tooooabsdsadooo             #too  和 ab  将被标红
[root@localhost tmp]# echo "goodaaaglad"  | grep -E 'g(oo|la)d'          #表示匹配到good或者glad
goodaaaglad                  #good和glad将被标红
[root@localhost tmp]# echo "goodgabcabcabcglad"  | grep -E 'g(abc)+g'  #是匹配到gabcabcabcg
goodgabcabcabcglad        #找的是以g开头g结尾,中间是一个以上的abc

書き込みは、日付形式YYYY-MM-DDの正規表現にマッチ(消化します)

[root@localhost tmp ~]# echo "2019-12-30" |grep -E '[1-9][0-9]{3}-((0[1-9])|(1[0-2]))-((0[1-9])|([12][0-9])|(3[01]))'
2019-12-30
[root@localhost tmp ~]# echo "1919-12-30" |grep -E '[1-9][0-9]{3}-((0[1-9])|(1[0-2]))-((0[1-9])|([12][0-9])|(3[01]))'
1919-12-30

定期的なハイレベルのコンポーネント:グリードは|非貪欲(理解するように)
欲があり、できるだけ多くが一致するように、
マッチングが可能な限り少ない非貪欲、唯一のバックに加え、いくつかの表現数量詞(、倍の数である)?のような、:.*? +?
のgrepやegrepのデフォルトは、貪欲され、非貪欲モードをサポートしていません。
通常のPerl言語環境を使用して非貪欲-Pパラメータを使用する必要性を実現するために、ここに画像を挿入説明

4.awk

1.awkプロフィール

awkの双方向テキストとデータ処理は、プログレッシブスキャン最後の行の最初の行からファイルを、特定のパターンにマッチする行を探して、あなたはこれらのラインにやりたいようなものです。操作を処理して指定しない場合、マッチラインは、画面上に何のモードが指定されていない場合は、すべての行が指定されて演算処理を表示置きます。

2.awkの使用状況

awkの[オプション]ファイル名の「コマンド」
のファイル名のawkの[オプション] -f-AWKスクリプトファイルは、スクリプトファイルのコマンドから読み取るために-f手段awkの
オプション:
-F各処理の内容を、サブ定義された区切り文字を指定することができ、デフォルト区切り文字は、空白文字(スペースまたはタブ)である
コマンド:

BEGIN{}            	处理匹配到内容之前的动作
{}             				处理匹配到内容之中的动作
END{}            		处理匹配到内容之中的动作
3.作品

(1)awk是一行一行处理的,每次处理时,使用一行作为输入,并将这一行赋给内部变量$0,以换行符结束
(2)每行会被分隔符分成多个字段,每个字段存储在已编号的变量中,从$1开始,最多达100个字段
(3)初始时,FS赋为空白字符,所以默认为以空格为分隔符
(4)awk打印字段时,将以内置的方法使用 print 函数打印,awk 在打印出的字段间加上空格。这个空格是内部的一个变量 OFS 输出字段的分隔符, 逗号 , 会和 OFS 进行映射,通过 OFS 可以控制这个输出分隔符的值。
(5)awk输出之后,将从文件中获取另一行,并将其存储在$0中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。该过程将持续到所有行处理完毕

4.与字段有关的内部变量
$0 : awk变量 $0 保存当前正在处理的行内容
NR : 当前正在处理的行是 awk 总共处理的行号。
FNR: 当前正在处理的行在其文件中的行号。
NF :每行被处理时的总字段数
$NF: 当前处理行的分隔后的最后一个字段的值
FS : 字段分隔符,默认空格
OFS : 输出字段分隔符,默认是一个 空格
ORS 输出记录分隔符, 默认是换行符.
[root@localhost tmp ~]# awk 'BEGIN{FS=":"} {print $NF}' /etc/passwd     #以:(冒号)为分隔符,输出每一行的最后一个字段的值
[root@localhost tmp]# awk 'BEGIN{FS=":"; OFS="+++"} /^root/{print $1,$2,$3,$4}' /etc/passwd
root+++x+++0+++0                  #输出时以+++隔开
[root@localhost tmp]# awk 'BEGIN{ORS="  "} {print $0}' /etc/passwd #将文件的所有行合并为一行
5.awk模式和动作

awk语句是由模式和动作组成的
模式可以是正则表达式,比较表达式等,而动作一般都是打印print
1.正则表达式:

awk '/正则表达式/'     filename      整行匹配   /正则表达式/  或 !/正则表达式/ 或 $0 ~ /正则表达式/
awk '字段 ~ /正则表达式/'     filename      某一字段匹配 字段 ~ /正则表达式/ 或 字段 !~ /正则表达式/
[root@localhost tmp]# awk -F: '/alice/' /etc/passwd      #只要有anlice就行
[root@localhost tmp]# awk -F: '$NF !~ /alice/' /etc/passwd      #最后一个字段不是anlice

2.比较表达式

== 等于 
!= 不等于                      
< 小于 
> 大于
<= 小于 
>= 大于等于

== 等于 != 不等于 两边可以是数字也可以是字符串

[root@localhost tmp]# awk -F: '$NF == "alice" ' /etc/passwd      #最后一个字段是anlice (别忘了字符串要引起来)
[root@localhost tmp]# awk -F: '$3== 0' /etc/passwd      #第三个字段是0
[root@localhost tmp]# awk -F: '$3 > 0 ' /etc/passwd      #第三个字段大于0

3.条件表达式:if if else
4.逻辑表达式:
&& 与 同时满足
|| 或 满足其中一个
! 非 取反
5.范围模式
起始表达式, 终止表达式

[root@localhost tmp]# awk -F: '/^bin/,/adm/ {print $0 }' /etc/passwd
#从开头是 bin 的行开始匹配成功一直到含有 adm 的行结束匹配(中间的行也都打印出来)

6.外部变量的引用
一般是用awk -v 参数

[root@localhost tmp]# test=hello
[root@localhost tmp]# echo "hello world" | awk -v var=$test '$1 == var {print $1}'
hello

5.sed

awkを用いて動作モードをsedのラインで処理されたすべての行は次のように、
また、正規表現をサポートsedは、また、支持体は、通常の拡張が、使用に-rパラメータを使用するには、定期的に拡張しました。だから、実際の使用では、一般的に-rスイッチ、あなたは拡張正規でもエラーを使用していない場合でも。
各行は関係なく、それが再び出力に一致する場合は、この行の内容は、パターンに一致するかどうかの、デフォルトの出力ファイルをsedの。使用して、デフォルトの出力パラメータ-nシールド
出力が変化した場合にのみ、このパラメータを追加しますが、実際には何のドキュメントの変更はありません、ファイル内部の内容を変更する-iパラメータを

1.ほとんど----実際の交換を使用して検索
# 搜索每一行,找到有 root 的,把第一个替换为yjssjm
sed  -rn  's/root/yjssjm/'   filename
# 搜索每一行,找到所有的 root 字符,进行全局替换为 yjssjm
sed  -rn  's/root/yjssjm/g'   filename     
# i  是同时忽略大小写
sed  -rn  's/root/yjssjm/gi'    filename #也就是可以将Root ROot 等替换成yjssjm
# 找到含有 root 的进行删除
sed  -rn  '/root/d'   filename
# 可以使用不同的 字符 作为界定符号,注意进行转义
sed  -rn  '\#root#d'  filename
# 第 1 行到第 3 行都删除
sed  -r  '1,3  d'    filename
2.sed一般的に使用されるコマンド

1.コマンドを交換します。■

# 将所有的两位数字后面加.5
[root@localhost tmp]# echo "77      1"|sed -r 's/[0-9][0-9]/&.5/'
77.5      1
#/()/\1/  注意格式
[root@localhost tmp]# echo "nowrite" | sed -r 's/(no)write/\1写/'
no写

2.追加コマンド:(後行のマッチングに加え)

[root@localhost tmp]# echo "aaaaaaa" | sed -r 'a\111111111'
aaaaaaa
111111111

3.挿入コマンド:I(マッチの行の前に挿入)

[root@localhost tmp]# echo "aaaaaaa" | sed -r 'i\111111111'
111111111
aaaaaaa

4.変更コマンド:C

[root@localhost tmp]# echo "aaaaaaa" | sed -r 'c\111111111'
111111111
3.複数の編集オプション:-e
sed -re '1,3 d' -re 's/root/yjssjm/' filename
等同于
sed -r '1,3 d; s/root/yjssjm/' filename
或者多行命令
sed -r '1,3 d' filename
sed -r 's/root/yjssjm/'dfilename
4.一般的なオペレーティング

セットリストが表示されていないいくつかの特殊記号を表示することができます:ファイルで使用する
、といった:$空白行の先頭を示し、$の終わりにキャリッジリターンを表し、

删除配置文件中被注释的行
sed -ri '/^#/d' filename
删除配置文件中空行
sed -ri '/^$/d' filename
删除开头的一个或者多个空格或者Tab键
sed -ri '/^[ \t]*#/d' filename
给文件3到7行添加注释
sed -r '3,7s/^/#/' filename
公開された31元の記事 ウォン称賛91 ビュー10000 +

おすすめ

転載: blog.csdn.net/baidu_38803985/article/details/105023004