Open8
シェルの練習
書けなすぎるのでこの機会にと思って勉強している。昔研修でやったんだけど、その後Windowsで業務してしまっていたので…
sed
文字列置換のときに使えるやつ。s//
をすると最初に見つけたやつを置換する。s//g
とすると、見つけたやつは全部置換する。知らなかった用法をメモしておく。
&
で同じ文字の利用をできる。下記の例では、& = エチル
になっている。2回繰り返したいので &&
とする。
❯ echo クロロエチルエーテル | sed 's/エチル/&&/'
クロロエチルエチルエーテル
拡張正規表現は -E
で使える。下記は「メチル」と「エチル」を取り出し、後方参照を使って入れ替えている。\1
がエチル、\2
がメチルを指す。
❯ echo クロロメチルエチルエーテル | sed -E 's/(メチル)(エチル)/\2\1/'
クロロエチルメチルエーテル
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
seq
指定したところまで数字の列を出力できる。
❯ seq 4
1
2
3
4
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
ディレクトリの中身を一気に削除する
ls -U | xargs -P2 rm
[
これはコマンド。テストコマンドと呼ばれるもの。
if
の後ろにいつもなぜかいて、なぜかスペースなしで条件を書くと落ちるなあみたいなことを思っていた。
man [
するとちゃんとどういうコマンドか詳細が出てくる。
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