シェルスクリプトの正規表現(およびsort、uniq、tr)を密かに学ぶ

1つ、並べ替えコマンド

  • ファイルの内容を行ごとに、またはさまざまなデータ型に従って並べ替えます

構文形式:

sort [选项] 参数
cat file | sort 选项
一般的なオプション 特徴
-f ケースを無視する
-b 先頭の空白を無視する
-M 3文字の月で並べ替え
-n 番号で並べ替え
-r 逆ソート
-u uniqと同等です。つまり、同じデータの1行のみが表示されます。
-t フィールド区切り文字を指定します。デフォルトでは[Tab]を使用して区切ります
-k ソートフィールドを指定する
-o <出力ファイル> ソートされた結果を指定されたファイルにエクスポートします

ここに画像の説明を挿入
ここに画像の説明を挿入
ローカル変数によると、ローカル環境変数が同じでない場合、並べ替えも異なる場合があります
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

sort -t ':' -k 1  /etc/passwd -o ./passwd.txt

ここに画像の説明を挿入

du -ah | sort -nr -o du.txt

ここに画像の説明を挿入

2、uniqコマンド

  • ファイル内の連続する繰り返し行を報告または無視するために使用され、多くの場合、sortコマンドと組み合わされます

構文形式:

uniq [选项] 参数
cat file | uniq 选项
一般的なオプション 特徴
-c ファイル内の繰り返し行をカウントして削除します
-d 重複する行のみを表示する
-u 1回発生する行のみを表示する

ここに画像の説明を挿入

3、trコマンド

  • 通常、標準入力から文字を置換、圧縮、および削除するために使用されます

構文形式:

tr [选项] [参数]
一般的なオプション 効果
-c 文字セット1の文字は予約され、他の文字(改行を含む\ n)は文字セット2に置き換えられます
-d 文字セット1に属するすべての文字を削除します
-s 繰り返し文字列を1つの文字列に圧縮し、文字セット1を文字セット2に置き換えます
-t 文字セット2は文字セット1を置き換え、結果はオプションなしで同じです。
パラメータ 効果
文字セット1 変換または削除する元の文字セットを指定します。
変換操作を実行するときは、パラメータ「文字セット2」を使用して、変換の対象となる文字セットを指定する必要があります。
ただし、削除操作を実行する場合、パラメータ「文字セット2」は必要ありません。
文字セット2 変換する対象の文字セットを指定します。
echo "hello" | tr 'a-z' 'A-Z'
echo "hello" | tr 'a-z' -t 'A-Z'

ここに画像の説明を挿入

echo abccabacca | tr -c "ab\n" "0"

ここに画像の説明を挿入

echo "abcdefg" | tr -d "de"

ここに画像の説明を挿入

echo "abbcccddddaaaaa" | tr -s "abcd"

ここに画像の説明を挿入
パス変数のコロン「:」を改行文字「\ n」に置き換えます

echo $PATH | tr -s ":" "\n"

ここに画像の説明を挿入

  • Windowsファイルの「原因」の「^ M」文字を削除します
cat file | tr -s "\r" "\n" > new_file
cat file | tr -d "\r" > new_file
Linux中遇到换行符("\n")会进行回车+换行的操作,回车符反而只会作为控制字符("^M")显示,不发生回车的操作。
而windows中要回车符+换行符("\r\n")才会回车+换行,缺少一个控制符或者顺序不对都不能正确的另起一行。

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

  • 配列の並べ替え
echo ${arr[*]} | tr ' ' '\n' | sort -n

ここに画像の説明を挿入

4つの正規表現(重要)

  • 通常、文字列が特定の形式を満たしているかどうかを確認するために判断文で使用されます
  • 正規表現は通常の文字とメタ文字で構成されます
    • 一般的な文字には、大文字と小文字、数字、句読点、その他の記号が含まれます
    • メタ文字とは、正規表現で特別な意味を持つ特殊文字を指し、ターゲットオブジェクトの先頭文字(メタ文字の前の文字)の出現モードを指定するために使用できます。

(1)基本的な正規表現

  • サポートされているツール:grep、egrep、sed、awk
基础正则表达式常见元字符:
\ :转义字符,用于取消特殊符号的含义,例:\!、\n、\$等

^ :匹配字符串开始的位置,例:^a、^the、^#、^[a-z]
 
$ :匹配字符串结束的位置,例:word$、^$匹配空行

. :匹配除\n之外的任意的一个字符,例:go.d、g..d

* :匹配前面子表达式0次或者多次,例:goo*d、go.*d

[list] :匹配list列表中的一个字符,例:go[ola]d,[abc][a-z][a-z0-9][0-9]匹配任意一位数字

[^list] :匹配任意非list列表中的一个字符,例:[^0-9][^A-Z0-9][^a-z]匹配任意一位非小写字母

\{
    
    n\} :匹配前面的子表达式n次,例:go\{
    
    2\}d、'[0-9]\{2\}'匹配两位数字

\{
    
    n,\} :匹配前面的子表达式不少于n次,例:go\{
    
    2,\}d、'[0-9]\{2,\}'匹配两位及两位以上数字

\{
    
    n,m\} :匹配前面的子表达式n到m次,例:go\{
    
    2,3\}d、'[0-9]\{2,3\}'匹配两位到三位数字

注:egrep、awk使用{
    
    n}{
    
    n,}{
    
    n,m}匹配时“{
    
    }”前不用加“\”

(2)拡張正規表現

  • サポートされているツール:egrep、awk
扩展正则表达式元字符:
+ :匹配前面子表达式1次以上,例:go+d,将匹配至少一个o,如god、good、goood等

? :匹配前面子表达式0次或者1次,例:go?d,将匹配gd或god

() :将括号中的字符串作为一个整体,例1:g(oo)+d,将匹配oo整体1次以上,如good、gooood等

| :以或的方式匹配字条串,例:g(oo|la)d,将匹配good或者glad

(3)正規表現を使用する

ここに示す2つの例があります。主なことは、自分自身を理解してから使用することです。

  • 139から始まる携帯電話番号を一致させる
#以139开头,后面随机8位数字组合
"^139[0-9]{8}$"

egrep "^139[0-9]{8}$" shoujihao.txt
grep "^139[0-9]\{8\}$" shoujihao.txt 

ここに画像の説明を挿入

  • 一致する電子メールアドレス
用户名@ :^([a-zA-Z0-9_\-\.\+]+)@
子域名 :([a-zA-Z0-9_\-\.]+)
.顶级域名(字符串长度一般在2到5) :\.([a-zA-Z]\{
    
    2,5\})$

egrep '^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$' email.txt
awk '/^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/{print $0}' email.txt

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_51326240/article/details/111766599