ホームページ  >  記事  >  ウェブフロントエンド  >  正規表現と Linux の 3 つの主要なテキスト処理ツールの使用方法の詳細な説明

正規表現と Linux の 3 つの主要なテキスト処理ツールの使用方法の詳細な説明

php中世界最好的语言
php中世界最好的语言オリジナル
2018-03-29 13:58:191413ブラウズ

今回は正規表現とLinuxの三大テキスト処理ツールの使い方について詳しく解説します 正規表現とLinuxの三大テキスト処理ツールを使う際の注意点は以下の通りです。実際のケースを見てみましょう。

grep、sed、および awk はすべてテキスト処理ツールですが、それぞれに独自の長所と短所があります。そうでない場合、3 つのテキスト処理コマンドは存在しません。加工された。

1。 [0-9]: 数字 [a-zA-Z0-9]: 文字または数字の文字と一致します : スペースを除く、任意の 1 文字と一致します

[0-f]: 16 の基本番号。 abc | def: abc または def

a (bc | de) f: abcf または adef

<: 通常、最初の単語はスペースまたは

特殊文字

で区切られ、連続する

文字列

は単語として

>: 語尾

[^式]: 小文字を除くすべての文字など。

2. 一致の数を制御するには、次の記号が続きます


そのような記号の左側には、上記の最初の点の式が必要です

Expression*: 0 または n 文字Expression+: 1 または n文字数 expression?: 0 文字または 1 文字

expression{n}: n 文字

expression{n:m}: n ~ m 文字

expression{n,}: n 文字以上 [例] [ a-z]* は 0 個以上の小文字と一致することを意味します

3. 先頭と末尾に一致する文字を制御します

^ 式: 先頭が

式に一致 $: 末尾が

に一致します 2. 3 つの主要なテキスト処理ツール。 Linux

1. egrep フィルタリング ツール

grep の拡張バージョン。正規表現を使用できます

構文:


egrep - オプション '正規表現' ファイル名

オプション:

-n:行番号を表示します -o: 一致するコンテンツのみを表示します -q: サイレント モード、出力なし、実行が成功したかどうか、つまり、目的のコンテンツがフィルターされているかどうかを判断するには $? を使用する必要があります -l:一致が成功するとファイル名のみが出力されます。失敗した場合は出力されません。 grep -rl 'root' /etc -A: 一致が成功した場合は、一致する行が出力されます。 n 行をまとめて出力します

-B: 一致した場合、一致した行とその前後の n 行をまとめて出力します

-C: 一致した場合、一致した行とその前後の n 行を出力します。前後n行をまとめて--color -c: 一致が成功した場合、一致した行数を出力します

-i: 大文字と小文字を無視します

-v: 否定、一致しません

-w: 単語を一致させます

2, sed ストリーム

エディタ


文法:

構文 1: sed - オプション '数値位置決め + コマンド' ファイル名

オプション:

-n: サイレント モード、出力なし
-e: 複数編集、これはあまり明確ではありません
-i: 出力ではなくファイルの内容を直接変更します
-r: 拡張モード、正規表現を使用できます
-f: ファイル名を指定し、新しいファイルにアクションを書き込みます

コマンド: a ∶ 追加、c ∶ 変更変更、d ∶ 削除削除、

i ∶ 挿入、i の後に文字列を続けることができ、これらの文字列は新しい行 (現在は前の行) に表示されます

p∶ Print print

s∶ 代替品の交換 、直接交換作業を実行できます。通常、このアクションは正規表現と組み合わせることができます。例: 1,20s/old/new/g

*s コマンドの特別な命令:

複数のコマンドを追加するには、{コマンド 1: コマンド 2: コマンド 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 の 3 つの主要なテキスト処理ツールの使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。