機略戦記

Maneuver warfare

shell

catするとき、一緒にファイル名を表示したい

結論 空文字でgrepする。 $ find . | xargs grep ""

パターンに一致するファイルの拡張子を全部変更したい

カレントディレクトリにある*.csvの拡張子を.txtに変える。 for fname in *.csv; do mv $fname ${fname%.csv}.txt; done

コマンドの実行結果をファイルに出力しながら標準出力にも表示したい

結論 (なんらかのなにか) | tee output.txt これで、output.txtに実行結果が書き込まれつつ、画面にも表示される。

異なるディレクトリに入った同名のファイルを1箇所にまとめたい

異なるディレクトリに入った同名のファイルを1箇所にまとめたい。 ファイル名が同一なので、何かユニークな名前に変える必要がある。 結論 for i in `find . | grep .gz` do before=$i after=`echo $before | sed 's/\.\///g' | sed 's/\//_/g'` `cp $before…

例えば`find .`の結果に対して繰り返し同じ処理を適用したい

あるコマンドの実行結果として得られたすべての行に対して別の処理を行いたい。 例えばfind .の結果に対して繰り返し同じ処理を適用したい。 結論 for line in `find .` ; do ; echo $line ; done 解説 find .の結果が変数$lineに格納される。 echo $lineがf…

SSHが切断されてもリモートでコマンドを実行し続けるやつなんだっけ

結論 $nohup コマンド

Macで`du --max-depth=1`が使えない気がする

結論 du -d 1でOK

ワイルドカードで指定したExcelで作ったS-JISのCSVを全部UTF8に変換したい

結論 for f in *.csv ; do ;cat $f | iconv -f CP932 > $f.utf8 ; rm $f ; mv $f.utf8 $f ; done 説明 シェルでワイルドカードで指定したファイル全てに対して特定の処理をしたい - 時系列のフリーランチshinya131-note.hatenablog.jp Excelで作成されたSJIS…

シェルでワイルドカードで指定したファイル全てに対して特定の処理をしたい

結論 for f in *.csv ; do ; (ここお好きな処理を書く。$fにファイル名が入っている) ; done 説明 イテレーターみたいなやつ

コマンドラインでExcelのvlookupみたいな事したい。mコマンド使ったら出来た。

結論 mコマンドのmjoin使うのが良さそう mjoin k=Ticket m=ticket_duplicate_count_table i=train.csv 説明 i=で指定したファイルに、列を追加している。 結合のキーはk=で指定したカラム データソースはm=で指定したカラム このような操作をコマンドライン…

あるファイルに重複する行が無いかチェックしたい

結論 cat あるファイル | sort | uniq -c | awk '$1 > 1' 解説 sortしてuniq -cすることで、1列目に出現回数、2列目に内容が出力される。 awkで1列目が2以上になっている行(=重複した行)を取り出してる。

xargsで任意の位置にパラメーターを渡したい

結論 -Iオプションを使う。 find .| xargs -I{} cp {} ~/scenario Man page of XARGS 解説 -Iオプションで置換対象文字を指定できる。

変な文字を含むファイル名が無いかチェックしたい

結論 find .で全ファイル名を取得して正規表現で探す $ find . -type f | awk -F / '{print $NF}' | awk '!/^[a-zA-Z0-9._-]+$/' has_space_file_name 2.png has_ampersand_file&name.jpg 日本語のファイル名.txt 説明 find . -type f | # 全ファイル名を取…

aliasを設定したとき、元のコマンド名を無効化したい

alias便利 shellのaliasは便利な機能だ。 よく使うコマンドに短縮型を設定してシェルの操作を効率化することができる。 #.zshrc alias g='git' $ g status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working di…

zshでEnterするたびにgit statusを表示するやつが便利すぎる

結果イメージ やりかた .zshrcにこれを追記 ## enterをおした時にls & git status function do_enter() { if [ -n "$BUFFER" ]; then zle accept-line return 0 fi echo echo -e "\e[0;33m--- ls ---\e[0m" ls # ↓おすすめ # ls_abbrev if [ "$(git rev-pars…

oh-my-zshを使わずにプロンプトにgitの情報を表示したい

vcs_infoというzshの拡張機能を使えば実現できる。 できる。 例 .zscrhの中にこんな感じで書く。 autoload -Uz vcs_info ## プロンプトが表示される毎に実行される関数 precmd () { vcs_info } ## prompt ### vcs_info 表示内容をカスタマイズ zstyle ':vcs_…

zshでプロンプトをカスタマイズしたい

結論 .zshrcでPROMPT変数を設定すればよい。 例 このように設定する: # .zshrc PROMPT="%~ %# " 以下のようになる: ~/Desktop % %~はカレントディレクトリを表す。 このような特殊変数がいくつか用意されているので好きなようにカスタマイズする。 続き ググ…

Terminalでexitした時に即座にタブを閉じる

課題 Terminalでexitした時に[プロセスが完了しました]などと表示されて、即座にタブが閉じない。この挙動を変えたい。 解決策 command + ,でTerminalの設定を開き、シェル終了時:の動作をウインドウを閉じるにすれば良い。