並べ替えコマンドsort、uniq、および文字変換コマンドtrと正規表現(1年間、母に衝撃を与えるための詳細!)

ソートコマンドsort、uniqおよび文字変換コマンドtrおよび正規表現

1つ、並べ替えコマンド

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

  • フォーマット:
sort [选项] 参数 
cat file | sort 选项
  • 一般的なオプションとその機能
一般的なオプション 役割/機能
-f ケースを無視します。たとえば、Aとaは同じエンコーディングと見なされます
-b 最初のスペース文字部分を無視します
-M JAN、DECなどの3文字の月で並べ替えます
-n 番号で並べ替え
-r 逆ソート
-u これはuniqであり、同じデータの1行のみが表示されます
-t 区切り文字を指定し、[Tab]キーを使用してデフォルトで区切ります
-k ソートフィールドを指定する
- ソートされた結果を指定されたファイルにエクスポートします

例1:

①個人アカウントは/ etc / passwdの下に記録され、cat / etc / passwd | sortを使用してソートします。デフォルトのソートは[最初の文字]で、[text]の形式でソートされるため、aから最終

ここに画像の説明を挿入

②3列目で並べ替える-nを付けないと、数字の大きさで並べ替えられないことがわかります。

ここに画像の説明を挿入

③ソートした結果を他のファイルに出力したい場合は、-o [ファイルの場所]を使用できます。新しいファイルを再度作成する必要はありません。自動的に11.txtが作成されます。

sort -t ':' -k 3 -n /etc/passwd -o 11.txt

ここに画像の説明を挿入

出力結果を確認してください

ここに画像の説明を挿入

④数字で並べ替えるように-nを追加すると、非常に明確になります

ここに画像の説明を挿入

⑤逆ソート用Plus-r

ここに画像の説明を挿入

例2:

①1.txtファイルを作成し、sortでソートします。これに基づいて、優先順位は空白行>番号>文字の順序>小文字>大文字であることがわかります(スペース>タブ)

ここに画像の説明を挿入

cat -Aを使用して、関連する特殊記号を明確に確認します

ここに画像の説明を挿入

②sort-fを使用して、次のように並べ替えます。優先度:空白行>タブ>スペース>番号>文字の順序>大文字>小文字

ここに画像の説明を挿入

③sort-uを使用して重複を削除すると、ABCと123のみが重複の削除を実行していることがわかります。前のスペースとタブを含む行は同じデータではないため

ここに画像の説明を挿入

補足:ディレクトリ内のすべてのファイルのサイズを数えます

①フォルダ内のすべてのファイルをサイズで並べ替え、最大の5つのファイルのみを表示するには、次のコマンドを使用できます

du -a | sort -rn | head -5

コマンドの説明:

du -aは、ディレクトリ内のすべてのファイルのサイズをカウントします

sort -nrは数値サイズでソートされ、逆ソート、つまり逆ソートです。

デフォルトでは、headの後のオプションは最初の10を表示せず、-5を追加すると最初の5つだけが表示されます。

ここに画像の説明を挿入

注:-nは数値で並べ替えることを意味し、数値のみを認識し、単位は認識しません。この例の数値はファイルサイズであり、単位はデフォルトのKBであるため、このコマンドはdu-ahを使用できません。ソート結果は、5Mが20K未満であるように見えます。

②MB単位で表示する必要がある場合は、コマンドを使用できます

du -am | sort -rn | head -5

ここに画像の説明を挿入

③統計結果を他のファイルに保存する必要がある場合は、コマンドを使用できます

du -am | sort -rn | head > du4.txt

ここに画像の説明を挿入

④du5.txtファイルに保存して表示

du -am | sort -rn -o du5.txt 
head du5.txt

ここに画像の説明を挿入

2、uniqコマンド

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

  • フォーマット:
uniq [选项] 参数 
cat file | uniq 选项
  • 一般的なオプションとその機能
一般的なオプション 関数
-c ファイル内の繰り返し行をカウントして削除します
-d 重複する行のみを表示する
-u 1回だけ表示される行のみを表示する
-私 大文字と小文字の違いを無視する

例:

①uniq-cデモ

ABCは実際には3回表示されますが、隣接する行にないため、ここでは2回しかカウントされません。

ここに画像の説明を挿入

②uniq-dおよびuniq-uデモ

ここに画像の説明を挿入

3、trコマンド

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

  • フォーマット:
tr [选项] [参数]

一般的なオプションとその機能

一般的なオプション 関数
-c 文字セット1の文字は予約され、他の文字(改行を含む\ n)は文字セット2に置き換えられます
-d 文字セット1に属するすべての文字を削除します
-s 繰り返し文字列を1つの文字列に圧縮し、文字セット1を文字セット2に置き換えます
-t 文字セット2は文字セット1を置き換え、オプションが追加されていない場合の結果は同じです。

パラメータとその機能

パラメータ 関数
文字セット1 変換または削除する元の文字セットを指定します。
変換操作を実行するときは、パラメータ「文字セット2」を使用して、変換の対象となる文字セットを指定する必要があります。
ただし、削除操作を実行する場合は、パラメータ「文字セット2」は必要ありません。
文字セット2 変換するターゲット文字セットを指定します。

例:

①以下のコマンドを使用して、最後に出力された情報のすべての小文字を大文字に変換します。

last | tr 'a-z' 'A-Z'

ここに画像の説明を挿入

②tr-cを使用して、文字セット1の指定文字(または改行などの特殊記号)を変更せずに、他の文字を最後に指定した文字に置き換えます。

echo -e "abc\nabcdab" | tr -c "ab\n" "0"

ここに画像の説明を挿入

③tr-dを使用すると、指定した文字が削除され、パラメータ文字セット2は不要です。

実際、二重引用符 ""、一重引用符 "、および引用符は実行できず、結果は同じです。

echo "hello world" | tr -d "od"

ここに画像の説明を挿入

④tr-sを使用すると、繰り返される文字列が1文字に圧縮されるか、圧縮後、圧縮された文字が文字列2に置き換えられます。

echo "hellllo worrrllllld" | tr -s 'lr'
echo "hellllo worrrllllld" | tr -s 'lr' '78'

ここに画像の説明を挿入

たとえば、パス変数PATHのコロン「:」を改行文字「/ n」に置き換えることもできます。

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

ここに画像の説明を挿入

⑤sortコマンドで配列のソートを完了します

arr=(8 5 2 9 7 1)
echo ${arr[*]} | tr ' ' '\n' | sort -n 

ここに画像の説明を挿入

補足:Linuxシステムに移動するときに、Windowsファイルの改行記号「^ M」を削除します

したがって、LinuxシステムのWindowsでテキストファイルを使用する場合は、DOSファイルによって残された^ M改行記号を削除できます。Linux&Windowsシステムのユーザーにとって最も厄介なのは、DOSの下にあるこれです。改行記号^ Mは各行の最後に自動的に追加されます。このtrを使用して^ M!を削除できます。^ Mは\ rに置き換えることができます。

例:

Windowsシステムのファイルをxshellにドラッグし、cat-Aまたはcat-eを使用してその特別な記号を表示します

ここに画像の説明を挿入

trコマンドで処理できる特殊文字を表示するには、次のコマンドを使用して表示します

man tr

ここに画像の説明を挿入

DOSファイルの「^ M」文字を削除します

cat tr.txt | tr -s "\r" "\n" > tr1.txt
或
cat tr.txt | tr -d "\r" > tr1.txt

ここに画像の説明を挿入

4つの正規表現

1.正規表現とは

正規表現は通常、文字列が特定の形式を満たしているかどうかを確認するために判断ステートメントで使用されます

正規表現は、通常の文字とメタ文字で構成されます

一般的な文字には、大文字と小文字、数字、句読点、その他の記号が含まれます

メタ文字とは、正規表現で特別な意味を持つ特殊文字を指します。これを使用して、ターゲットオブジェクトの先頭文字(つまり、メタ文字の前の文字)の出現モードを指定できます。

2.基本的な正規表現

  • サポートされているツール: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}匹配时“{}”前不用加“\”

3.正規表現を拡張します

  • サポートされているツール: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

例:

①正規表現を使用してメールアドレスを照合する

用户名@ :^([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})$' youxiang.txt
awk '/^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/{print $0}' youxiang.txt

②@の前に特別な記号を使用できないようにする必要がある場合:

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

ここに画像の説明を挿入

③該当する携帯電話番号に合わせる

電話番号は11桁です。187で始まる電話番号と一致させる場合、つまり、最後の8桁は乱数の組み合わせです。

egrep、awk使用{n}、{n,}、{n,m}匹配时“{}”前不用加“\”
egrep "^187[0-9]{8}$" haoma.txt
如果用grep,需要加“\”
grep "^187[0-9]\{8\}$" haoma.txt 

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_35456705/article/details/112133474