Open8

シェルの練習

yukiyuki

sed

文字列置換のときに使えるやつ。s// をすると最初に見つけたやつを置換する。s//g とすると、見つけたやつは全部置換する。知らなかった用法をメモしておく。

& で同じ文字の利用をできる。下記の例では、& = エチル になっている。2回繰り返したいので && とする。

echo クロロエチルエーテル | sed 's/エチル/&&/'          
クロロエチルエチルエーテル

拡張正規表現は -E で使える。下記は「メチル」と「エチル」を取り出し、後方参照を使って入れ替えている。\1 がエチル、\2 がメチルを指す。

echo クロロメチルエチルエーテル | sed -E 's/(メチル)(エチル)/\2\1/'
クロロエチルメチルエーテル
yukiyuki

bc

電卓が使える。今までわざわざPython起動してました…

bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
(1 + 1) * (2 + 2)
8
yukiyuki

seq

指定したところまで数字の列を出力できる。

❯ seq 4
1
2
3
4
yukiyuki

ls -d {pattern}

いつも grep してました 😇

? をつけると、1文字だけのディレクトリやファイルを表示できる。

ls -d ?

他にはアスタリスクも他のコマンドと同様に使用できる。下記は dir_ で始まるディレクトリを表示してみる例。

❯ seq 4 | xargs -I@ mkdir dir_@
❯ ls -d dir_*
dir_1  dir_2  dir_3  dir_4
yukiyuki

ディレクトリの中身を一気に削除する

ls -U | xargs -P2 rm
yukiyuki

[

これはコマンド。テストコマンドと呼ばれるもの。

if の後ろにいつもなぜかいて、なぜかスペースなしで条件を書くと落ちるなあみたいなことを思っていた。

man [ するとちゃんとどういうコマンドか詳細が出てくる。

yukiyuki

builtin コマンドとそうでないもの

root@176d0b5ff8b5:/# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
# which echo 
/usr/bin/echo
# type echo
echo is a shell builtin

ビルトインの方を使用するとプロセスの生成などが不要になるのでとても速くなる。

下記は外部の echo コマンドを使用した場合。

# time for i in {1..1000}; do /bin/echo "$i" > /dev/null; done

real    0m0.563s
user    0m0.270s
sys     0m0.358s

ビルトインを使用した場合。

# time for i in {1..1000}; do builtin echo "$i" > /dev/null; done

real    0m0.022s
user    0m0.011s
sys     0m0.011s