grep
- ファイルの中の文字列を検索する。
- Global Regular Expressions Printの略。
#'IPv6'という文字列を含む行だけを表示
$ dmesg | grep IPv6
[ 0.689739] Segment Routing with IPv6
[ 26.730196] IPv6: ADDRCONF(NETDEV_UP): enp0s3: link is not ready
[ 26.736138] IPv6: ADDRCONF(NETDEV_UP): enp0s3: link is not ready
[ 26.738352] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready
# 'IPv6'という文字列含む前後1行も表示
$ dmesg | grep -w -1 IPv6
[ 0.689131] NET: Registered protocol family 10
[ 0.689739] Segment Routing with IPv6
[ 0.689755] NET: Registered protocol family 17
[ 19.260031] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
[ 26.730196] IPv6: ADDRCONF(NETDEV_UP): enp0s3: link is not ready
[ 26.736138] IPv6: ADDRCONF(NETDEV_UP): enp0s3: link is not ready
[ 26.738003] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[ 26.738352] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready
[ 106.762706] ICMPv6: process `rg' is using deprecated sysctl (syscall) net.ipv6.neigh.default.base_reachable_time - use net.ipv6.neigh.default.base_reachable_time_ms instead'
# -v:一致しないものを検索する
# パイプでAND検索になっている
# grepで'grep'自身のプロセスを除く
$ ps -aux |grep php | grep -v grep
root 884 0.0 0.0 226272 84 ? Ss 10:51 0:01 php-fpm: master process (/etc/php-fpm.conf)
apache 1105 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
apache 1106 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
apache 1107 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
apache 1108 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
apache 1109 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
#-i,--ignorecase:大文字小文字を区別しない
$ ps -aux | grep -i PHP
root 884 0.0 0.0 226272 84 ? Ss 10:51 0:01 php-fpm: master process (/etc/php-fpm.conf)
apache 1105 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
apache 1106 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
apache 1107 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
apache 1108 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
apache 1109 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
root 2605 0.0 1.3 206616 25232 ? S 12:17 0:00 PHP Language Server
root 2606 0.1 10.4 372012 195188 ? S 12:17 0:18 PHP Language Server
root 3873 0.0 0.0 10280 1064 pts/3 R+ 17:07 0:00 grep --color=auto -i PHP
#-e:OR検索
$ ps -aux | grep -e php -e -bash
root 884 0.0 0.0 226272 84 ? Ss 10:51 0:01 php-fpm: master process (/etc/php-fpm.conf)
apache 1105 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
apache 1106 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
apache 1107 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
apache 1108 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
apache 1109 0.0 0.0 240948 8 ? S 10:51 0:00 php-fpm: pool www
root 1481 0.0 0.0 24712 480 tty1 Ss 10:52 0:00 -bash
root 1514 0.0 0.0 23284 224 ? Ss 10:52 0:00 -bash
root 3936 0.0 0.2 24712 5112 pts/3 Ss 17:25 0:00 -bash
root 3970 0.0 0.0 10280 968 pts/3 S+ 17:27 0:00 grep --color=auto -e php -e -bash
uniq
- 重複行を除いた結果が出力される。
- 隣り合った行しか比較しないので注意。
- sortコマンドで並び替えてから、uniqにパイプすることで隣り合った行の重複行も取り除くことが出来る。
$ cat test.txt
aaaa
aaaa
bbbb
bbbb
cccc
cccc
aaaa
# 隣り合っていない重複行も表示されてしまう。
$ cat test.txt | uniq
aaaa
bbbb
cccc
aaaa
# 隣り合っていない重複行も取り除かれる。
$ sort test.txt | uniq
aaaa
bbbb
cccc
# -u, --unique:重複していない行だけを出力
$ sort test.txt | uniq -u
# -c, --count:重複した回数を出力
$ sort test.txt | uniq -c
3 aaaaaa
2 bbbbbb
2 cccccc
# 重複行を除いた結果をファイルに出力
$ uniq test.txt uniq.txt
$ cat uniq.txt
aaaa
bbbb
cccc
aaaa
sort
- 出力される内容を並び替えて出力する。
- デフォルトは昇順。-r,--reverseオプションで降順。
$ cat test.txt
4 ccccc
3 ddddd
5 eeeee
1 bbbbb
2 aaaaa
10 fffff
# キャラクターコード順で並び替え
$ cat test.txt | sort
1 bbbbb
10 fffff
2 aaaaa
3 ddddd
4 ccccc
5 eeeee
# 降順で並び替え
$ cat test.txt | sort -r
5 eeeee
4 ccccc
3 ddddd
2 aaaaa
10 fffff
1 bbbbb
# 数字として並び替え
$ cat test.txt | sort -n
1 bbbbb
2 aaaaa
3 ddddd
4 ccccc
5 eeeee
10 fffff
# キーを指定して並び替え
$ cat test.txt | sort k2
2 aaaaa
1 bbbbb
4 ccccc
3 ddddd
5 eeeee
10 fffff
# 並び替え済みかチェック
$ cat test.txt |sort -c
sort: -:2: 順序が不規則: 3 ddddd
# ナチュラルソート
$ cat test.txt |sort -V
1 bbbbb
2 aaaaa
3 ddddd
4 ccccc
5 eeeee
10 fffff
cut
- ファイル内文字列の切り出す。csvの特定の行を抜き出す時とかに使う。
$ ls -l
total 48
-rw-r--r--@ 1 yuya staff 4580 3 14 20:05 AppDelegate.swift
drwxr-xr-x 4 yuya staff 128 3 10 22:27 Assets.xcassets
drwxr-xr-x 3 yuya staff 96 3 10 22:58 Base.lproj
-rw-r--r--@ 1 yuya staff 733 3 13 00:07 DateUtils.swift
-rw-r--r-- 1 yuya staff 2005 3 10 22:27 Info.plist
drwxr-xr-x 6 yuya staff 192 3 11 23:06 Model
-rw-r--r--@ 1 yuya staff 3326 3 12 12:32 Notification.swift
-rw-r--r--@ 1 yuya staff 2335 3 10 22:27 SceneDelegate.swift
drwxr-xr-x 13 yuya staff 416 3 15 15:27 View
#-bでバイト数を指定して抽出。1から10バイトまで、と40バイト目以降
$ ls -l |cut -b 1-10,40-
total 48
-rw-r--r--20:05 AppDelegate.swift
drwxr-xr-x22:27 Assets.xcassets
drwxr-xr-x22:58 Base.lproj
-rw-r--r--00:07 DateUtils.swift
-rw-r--r--22:27 Info.plist
drwxr-xr-x23:06 Model
-rw-r--r--12:32 Notification.swift
-rw-r--r--22:27 SceneDelegate.swift
drwxr-xr-x15:27 View
# 2列目から最後までを抜き出し
# -d,--delimiterで区切り文字を指定、-fで表示する項目を指定
$ echo "field1,field2,field3,field4,field5" | cut -d , -f2-
field2,field3,field4,field5
# スペース区切りで項目を抜き出し
$ echo "field1 field2 field3 field4 field5" | cut -d ' ' -f2,3
field2 field3
tr
- 指定した文字を置換したり削除する。
- 文字クラス[:CLASS:]を使うことであらかじめ定義された文字を展開することができる。
- 引数にファイルは指定できないので、パイプやリダイレクションを使う。
文字クラス | 説明 |
---|---|
[:alnum:] | 英数字 |
[:alpha:] | 英文字 |
[:digit:] | 数字 |
[:upper:] | 英大文字 |
[:lower:] | 英小文字 |
$ cat /etc/centos-release
CentOS Linux release 8.1.1911 (Core)
# 文字範囲を指定して置換
$ cat /etc/centos-release | tr a-z A-Z
CENTOS LINUX RELEASE 8.1.1911 (CORE)
# アルファベット大文字を小文字に置換
$ cat /etc/centos-release | tr [:upper:] [:lower:]
centos linux release 8.1.1911 (core)
# -d:合致した文字を削除(Linuxという文字を消しているわけではない)
$ cat /etc/centos-release | tr -d Linux
CetOS release 8.1.1911 (Core)
# -s:指定した文字が連続した場合、1文字に置き換える
wc
- ファイル内のバイト数、単語数、行数を表示する。
- 単語数は空白または改行で区切られている前提でカウントされる。
$ cat test1.txt
abcdefg
# 行数, 単語数, バイト数
$ wc test1.txt
1 1 8 test1.txt
# 空白を空ける
$ cat test2.txt
a b cdefg
$ wc test2.txt
1 3 10 test2.txt
cat
- ファイルの内容を表示する、編集はできない
- 連結を意味するconcatnateの略
# 標準出力を連結
$ cat a.txt
aaa
$ cat b.txt
bbb
cat a.txt b.txt
aaa
bbb
#-n,--number:行番号をつけて出力
$ cat -n a.txt
1 aaa