2024/01/22 17:10
置換をするためのコマンドだが、PCREは基本使えない(自前でビルドすれば使える)
大抵のケースでPerlを使った方が楽だが、Busybox系のディストリなどで入っていない環境では重宝する。
オプション
-l
入力からケツ改行を消す
CLI入力するとケツに改行が入るのでそれを除去できる-p
入力行を処理する-e
スクリプトを流せるphp -r
のようなもの-i[ext]
ファイル置換。extに指定があるとバックアップファイルが生えるsed -i.bak -e 's/aaa/bbb/' path/to/file
チートシート
改行を改行コードに変換
コマンドを使う必要がある
入力
cat <<'EOF' | sed ':a;N;$!ba;s/\n/\\n/g'
aaa
bbb
ccc
ddd
EOF
出力
aaa\nbbb\nccc\nddd
コマンドの意味合い
コマンド | 意味合い |
---|---|
; |
恐らくコマンドの終わり |
: |
ラベル。今回の:a はラベルa |
N |
入力の次の行をパターンスペースに読み込む |
$ |
最終行にマッチ |
! |
マッチしない(アドレスとコマンドの間に入れる必要がある) |
b |
ラベルに分岐する。ba はラベルaに分岐。gotoみたいなもんだと思う |
つまり入力の次の行をパターンスペースに読み込み、最終行にマッチしなければ入力の次の行をパターンスペースに読み込み、マッチすればs/\n/\\n/g
が発動するのだと思われる。
2024/01/22 17:03
おなじみのアーカイブ作成コマンド。迷ったらヘルプ読んだほうが早い
圧縮編
基本
tar -zvcf foo.tar.gz foo
z: --gzip, gzip
v: --verbose, 詳細、別になくてもいい
c: --create, アーカイブの新規作成
f: --file, 保存するファイル名
tar -cf
だとtarballになると思われる
おまけ
T: --files-from, アーカイブ対象ファイルのリストを読み込む。LF区切りのテキスト
--exclude: <pattern>, アーカイブから除外するパスのパターン
展開編
tar -zxvf foo.tar.gz foo
z: --gzip, gzip
x: --extract, 展開
v: --verbose, 詳細、別になくてもいい
f: --file, 展開するファイル名
2024/01/22 16:53
ハイフン始まりを検索する方法
オプションに--
を指定する
grep -- '- foo'
PCREを使う方法
grep -P
除外検索をする方法
grep -v "除外ワード"
ファイルに含まれている文字をパス指定して再帰的に検索
grep 検索ワード -rl パス
2024/01/22 16:38
引数をスペース区切りで先頭から取り出すやつ。本質は配列操作だと思う
基本
shift 2
のようにするとシフト数を指定できる
while [ "$1" != "" ]
do
echo $1
shift
done
foo.sh abc de
を叩くと以下の出力が得られる
abc
de