今回は正規表現と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 つの主要なテキスト処理ツール。 Linux1. 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 の 3 つの主要なテキスト処理ツールの使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。