それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

bash

grep の後方参照の代替案 5つ

grep では 後方参照ができないので、代替案を考えることになる。 方法1基本的な方法 -o マッチした箇所だけを取り出す -o を使って、マッチした箇所だけを取り出す。 cat out.txt | \grep -Po 'Abc.*Xyz' 方法2 先読み+あとよみ 先読み・後ろ読みにマッチ…

bashスクリプトで標準入力か引数のどちらかを取得する

STDINか引数を処理するコマンドを作りたい。 たとえば、次のようなコマンドを作りたい。 標準入力があるときは、標準入力を使い、それ以外は引数を使う。 echo AAA | to_lower to_lower AAA to_lower の例。 ヒアストリングに展開すれば楽ちんです。 <<< ${@…

改行を維持して 変数をechoする。

改行を維持して echoする。 改行を保持したまま、変数を出力したい ダブルクォーテーションすることで改行が出る 変数定義 STR=" aaa " 出力例 echo $STR ## 改行が出ない echo "$STR" # 改行がでる 変数をダブルクォーテーションでクォートすると、変数内に…

wget が ipv6 につないでしまう。aliasでIPv4 に限定する

wget が v6アドレスを使ってしまう。 wgetで、v6アドレスを呼びに行ってしまう。NTTの壊れたフレッツ v6 ネットワークで大問題が起きている。 IPoEに早く対応させたほうがいいけど。v6のアドレスをIoT家電が山盛りの家庭内に頒布するのは躊躇われる。 wget …

コマンドが存在するか調査するコマンド、その名もcommand

コマンド存在スルか調査するコマンドに command が使えます。 $ command -v ls ; echo $? alias ls='ls --color=auto' 0 シェルの実行結果は 1/0 で戻されています。 echo $? は直前のシェルの実行結果$? を出力しています。正常終了なら0 異常終了なら $? >…

シェル ( /bin/sh ) での正規表現マッチ。

以前、bash の正規表現について書いた。 今回は、今更だけど、あえて、bash/zsh で使われている [[ を使わずに、正規表現を使おうとしてみた。 expr よりは bash の機能を使ったほうがいい。 以前書いた記事にある。bash/zsh の正規表現を使う方法が個人的に…

空白を含むパス名を含むコマンド文字列をシェル(bash)で処理する

" program files " のような空白を含むパス名を持ったコマンド全体を、変数に保持しててそれを実行したい時 そのままだと動かない。 ## これが実行できない。 cmd='ls ~/Library/Application\ Support/' $cmd 空白を含むパス名を入れたコマンドを文字列とし…

ディレクトリの中のファイルを「時刻」でソートする find と lsをつかって、最新のファイルだけを取り出す。

ls コマンドの場合 ls -t | head -n1 ls コマンドで、時刻順に並べることができるので、これを head と組み合わせれば出来る。 takuya@Gitlab:~$ sudo ls -lt /var/opt/gitlab/backups/ total 92268132 -rw------- 1 git git 43629199360 Apr 25 02:20 15877…

指定したファイルが存在するフォルダを指定する

画像が入ったフォルダを取り出したい。 Nextcloud を触っていて、画像が散らばってしまった。なので、画像大量に入ったフォルダを調べることにする。 となると、どんな方法が良いか思案したが、一番手っ取り早いのは find コマンドだろう find コマンドでjpg…

findコマンドでファイルの所有ユーザーを調べ所有者を間違っているファイルを探す。

find コマンドで、自分以外の所有者のファイルを探す。 ユーザーがtakuya 以外のファイルやディレクトリを探す。 find . -not -user takuya 指定した所有者のファイルを探す。 not を外せば、所有者を限定してファイルを探す。 find . -user takuya オーナー…

指定サイズのファイルを作る方法 ( head 編 )

任意の指定サイズのファイルを作る方法 head を使う場合。 takuya@~$ head -c 100k /dev/urandom > out takuya@~$ ll out -rw-r--r-- 1 takuya staff 100K 2020-03-18 13:59 out ランダム( /dev/urandom) から読み出して、指定サイズを作ります。 head は -c…

GLOBIGNORE で一時的に*(ワイルドカード)のglob 展開を止める。

bash / sh を使ってると glob が邪魔な時がある。 シェルスクリプトを書いていると、 * のワイルドカードの展開がじゃまになるときが多々あります。 その都度エスケープ刷ることが多いと思います。 たとえばワイルドカードを受け取ってあとで展開するような…

find コマンドで シンボリックリンク以外を表示してduする

シンボリックリンクを隠して一覧を取得したい。 実ファイルの du を取ろうとしたときに、シンボリックリンクがじゃまになる。 find -not -type l du を組み合わせて戦う。 du したいときなら ディレクトリと階層を指定する find -type d -not -type l -maxde…

bash で指定回数ループする方法いろいろ for / while など

bash で指定回数ループする方法のあれこれまとめ bash で使える方法です。sh では使えません。 while で10回ループ bash 算術演算のカッコと組み合わせて強いです。 #!/usr/bin/env bash while (( cnt++ < 10 )); do echo $cnt done break も使えます。 br…

シェル(bash)の履歴を指定業だけど消す(間違えてパスワードを履歴に残した)

パスワードを打ち込んでエンターしてしてしまった。 パスワードなど、履歴を残したくない文字列を履歴に残してしまった場合。 たまに、やらかしますよね。複数ウインドウでフォーカスが違ってたとか。 takuya@:~$ 'MyP@$$word' -bash: MyP@$$word: コマンド…

シェルスクリプトで実行中の関数名を関数内部から知る(自分自身の関数名)

自分自身の関数の名前を知りたい。 関数名は、関数名を表す変数に入っている(BASHで確認) echo ${FUNCNAME[0]} これを使うと、自分自身の関数名を実行中に参照できる。 takuya@Desktop$ function sample() { echo ${FUNCNAME[0]} ; }; sample sample 便利…

空白区切り文字列 を xargs で行へ展開-1行→複数行

xargs があるとすぐ出来ます。 xargs -n1 echo 例 空白区切りされた文字列をぱぱっと複数行にする。 xargs と echo を組み合わせると楽。 takuya@~$ echo hello world hello world hello world hello world | xargs -n1 echo hello world hello world hello …

ファイルが作成されてから何秒経っているか?作成後指定秒経過したらなにかする。

ファイルが作成されてから何秒経っているか? このファイルが、作成されてから何秒経過したか。それ知りたいことありませんか? ファイルAがファイルBより古いときはファイルAを更新するとか 作成後(更新後)の経過秒数を知る echo $(( $(date +%s) - $(date…

which コマンドでPATHにある同名のコマンドを全部列挙する

PATH の優先順位に悩まされるたときに which which コマンドを使うと 環境変数 PATH にあるコマンドのうち、最初に見つかったもの(実行されるもの)を表示してくれます。 which python どのコマンドが実行されるのか調べるのに便利ですし、よく使ってると思…

bash で三項演算子っぽく処理を書くには

bash でも三項演算子を使いたい かんたんな、初期値nullチェックとかで三項演算子的なことをよくやります。 bash でもやりたいなと思って調べててみたけど、なかった(あったので追記書きます。)。 条件分岐を使って原始的な手法がsh/bash で使えるのでご紹…

すぐわかる標準エラー出力と標準出力の捨て方( /dev/null へリダイレクト

だれですか ' &1' なんてファイルを作ったのは。 サーバーにログインしてみてたら'1' っていうファイルがあるんですね。1という名前のファイルがあるんですよ。 どう考えても、リダイレクトに失敗してますよね。 標準エラー出力を捨てる速攻で覚えるの書き…

bashのループと数字比較を組み合わせでVPNを接続開始して接続待ち、接続後に処理をする。

bash のサンプルプログラムを考えてた。 よくあるパターンとして、 〇〇を実行して〇〇が△△になるのをまってから、□□する を考えてみた。 VPN の接続を待機する 今回のサンプルはMacでVPNを接続し、接続待ちをし、VPN接続が完了したらルーティングを加える。…

bash の* ( アスタリスクのワイルドカード)でドットファイル(隠しファイル)を一時的にマッチさせる

TL;DR shopt -s dotglob shopt -u dotglob ドットファイルも含めたい時がある。 for i in $ (ls -a) はめんどくさいんだよなぁ ホームディレクトリで、*でワイルドカードマッチさせても一致しないのが不便。 ls -al しているときは気にならないのだけど、一…

$(pyenv init -) が遅いので遅延ロードにした

ターミナルの起動が遅い。 最近、妙にターミナルの起動が遅くて苦痛だなと思って調べたら pyenv 関連だった。 rbenv もそうだったし、pyenv もやはり遅い。 rbenv に関してはrbenv init では諦めて、symlink を使って解決しているが pyenv は別の方法を模索…

ip コマンドは -o オプションを使うと便利すぎてやばい

ip コマンド は -o オプションをつけるとメッチャ見やすい ip コマンドの ip a の結果はごちゃって見辛くないですか?私は非常に辛い。 とくにIPv6 が混じってきて、1つのインターフェースに複数のIPが入ってくると辛い シェルスクリプトで、grep してるけ…

bash で mac かどうかを判定する

mac かどうかをbash のif文の条件判定する [[ $(uname) =~ Darwin ]]; echo $? ## または [[ $(uname -a ) =~ Mac ]]; echo $? bash の正規表現ってホント便利 正規表現を使わない場合 bash 以外と bash 3.2 未満は正規表現が使えないので、glob でマッチす…

xargs でシェルのalias を使えるようにする方法。

xargs で alias が使えない takuya@:教科書$ find -type d -maxdepth 1 | xargs ll xargs: ll: そのようなファイルやディレクトリはありません 悲しい。Aliasはあくまで bashのエイリアスであり、シェル経由せずにfork するような場合には全く役に立たない。…

sudo su実行後も環境変数を維持する

suの実行後にカレントディレクトリを維持したい su を実行するとカレントディレクトリが変わってしまうので、いまいるディレクトリやeditor 変数をそのままに 別ユーザーになりたい。 sudo -E を使う sudo にオプションを付ければ、カレントディレクトリなど…

xargsで複数行のコマンドを実行する方法

xargs で複数行のコマンドを実行したい。 出来ない・・・ ls *.txt | xargs -I@ echo @ ; sleep 1 forループならできるんだけど、for ループだとどうしても不便。 xargs でシェルコマンドを作って渡す. xargs だと限界があるので、もうシェルの文字列にして…

画像をpdfに変換する

画像を、PDF(画像埋込)に変換する img2pdf を使ってみる img2pdf のインストール img2pdfは pip で提供されている pythonのコマンドなので pip でインストールする。 pip install img2pdf これで準備出来た。 使ってみる。 ls *.jpg | xargs -I@ img2pdf @…