俺の開発大作戦

Linux, Mac, Windows10 で 迷走する1開発を進めていく備忘録5

UNIX の忘れがちなシェルコマンド備忘録

便利だが忘れがちなコマンド構文を備忘録として残していく第一弾。

1. 指定する文字列を含む文書を一括検索してフルパスで表示する

% find PATH -type f -print | xargs grep 'hoge' 2> /dev/null

PATH は検索を開始したい場所。hoge は検索したい文字列。

'xargs' コマンドは 'コマンドA | xargs コマンドB' のように2つのコマンドをパイプでつなぐことで前のコマンド(コマンドA)で取得した値(標準出力)を読み込み、それを引数としてコマンドBへ渡して実行させる役割を果たす。組み合わせや引数の組み合わせ次第では、コマンドが許容の長さを超える引数のリストを受け付けない問題を回避できたり、処理を並列化して高速化できる場合がある。

'find' コマンドは-typeオプションで、ファイルタイプを指定して検索できる。値を 'f' にすると通常ファイルを検索し、 'd' はディレクトリを、 'l' はシンボリックリンクを検索する。

また、 'find' コマンドに-printオプションをつけると、フルパスで検索結果を標準出力する。

コマンドに '2> /del/null' を付けると標準エラー出力を/dev/nullに捨てることができる。ブラウザのキャッシュなどが走査対象に含まれていて、'検索対象のファイルやディレクトリが見つからない'等のエラーが頻出する場合は、これらを表示しないようにできる。

2. ディレクトリ内にある全ての文書内の文字列Aを文字列Bに置き換える

% grep -l '文字列A' ./* | xargs sed -i.bak -e 's/文字列A/文字列B/g'

再び'xargs' コマンドを含む構文のコマンドで、「置換・削除」を行うための'sed' コマンドをパイプで繋ぐもの。

'sed' コマンドは-iオプションをつけると、変換処理後にファイルを上書き保存できる。更にこのオプションに文字列を続けると、元ファイルをこの文字列を接尾語としたファイルに別名保存して残しておくことができる。なお、文字列を続ける場合は、-iとの間にスペースを挟んではいけない。

'sed' コマンドの-eオプションをつけると、続けて指定する条件式に従って変換処理を行うことができる。このコマンドには、ほかに-fオプションも用意されていて、変換処理を行うための条件式が記述されたファイルの保存場所をPATH指定して、このファイルの内容に基づいて変換処理を進めることもできる。

'sed -e' で全文を一括置換する場合の構文は、's/文字列A/文字列B/g'。ほかにもsに繋げる構文の組み合わせでケースに応じた色々な置換ができる。

% sed -e "s/文字列A/文字列B/"       # 置換 行で最初に出てきた'文字列A'を'文字列B'に置換
% sed -e "s/^文字列A/文字列B/"      # 行頭(^)の'文字列A'を'文字列B'に置換
% sed -e "s/文字列A\$/文字列B/"     # 行末($)の'文字列A'を'文字列B'に置換($は\でescape)
% sed -e "s/~/文字列B/"          # 行頭に'文字列B'を追加
% sed -e "s/\$/文字列B/"         # 行末に'文字列B'を追加
% sed -e "s/.*/文字列C/"         # すべての行を'文字列C'に置換

* * *

Web制作等で複数ファイルに跨る変数やディレクトリ構造そのものを変える必要がある時に、変更漏れのファイルが無いか気になるところ。むしろ、そのような効率の悪い作業が発生しないように、編集効率の良いファイル構成を組みたいところだけど、作業中は仕様変更が頻繁に起こってそうもいかないことも少なからずある。

そんな時に、未編集ファイルの一括検出や置換が効率良くできるこれらコマンドは、非常に便利で重宝している。

俺: 小林康典(KOBACHAN)

▼プロフィール畳む

▶プロフィール見る

時はネットが産声をあげた前世紀末、東京大手町に本社がある元国営の通信事業会社に新卒入社し、以降およそ10年間勤務して、インターネット系の新規事業立ち上げに複数携わる。

その後、退職して、ITベンチャーのスタートアップ参画を皮切りに、複数のIT/Web企業でプロダクトマネージャーを務めた後、縁あって現在の会員制ホテル&医療系事業会社へjoin。

元来、エンジニアばかりの環境で過ごしてきたが、ここは一般の非IT系事業会社でIT関連は全て外注。内製中心のアジャイル開発を企てるも、実際に技術がわかり手も動かせるIT担当者の存在はほぼ皆無で、参加直後から周囲の理解が得られず孤立無援の大ピンチ。

幾たびの紆余曲折を経て、技術やデザインに素養がある仲間を一人一人見つけアジャイル開発の世界に勧誘しては、知識・ノウハウを提供して地道に自律的な成長を促し、小規模ながらなんとか内製開発できるチームの形を整える。

現在、業務改善系ITプロダクトの企画およびシステム開発、ビッグデータ分析やAIビジネス転化への試行錯誤など、マルチに行い奮闘中。
(最近は、サイボウズ社のSaasサービス「キントーン」関連の開発多め。)

E-mail: contact@kobachan.biz

カテゴリー
月別アーカイブ
  • 2020 (1)
  • 2019 (2)
  • 2018 (5)
  • 2017 (6)