もくてき テキストファイルを空行区切りで取り出す。 今回僕が触ってた対象はバックアップしたLINEの履歴です。 やりかた 思いついたのは空行間を一列にして改行区切りで取り出す方法 空行を目印となる文字に置き換える(今回は等号) 同様に改行を別の文字に置き換える 空行を改行に戻す IFSを設定した上でforとかで取り出す msg="$(cat xxx.txt | sed -e ’s/^$/=/g’ | sed -r -e ’s/=+/=/g’ | tr ‘\n’ ‘@’ | tr ‘=’ ‘\n’)" IFS=’ ‘ for i in $msg; do echo "$i" | tr ‘@’ ‘\n’ done; おまけ awkでやるときは区切り文字とかを設定してレコード番号から絞るらしい。 awk自体に制御構文はあるわけだし明らかに賢い (フィールド番号指定してできねーなって言ってた)。 AWK:空行で区切られたファイルを処理する - 廿TT あとタイトルのわりにBashである必要はない。
Continue reading

またシェルスクリプトネタです。 Githubで直接ファイルを書き換えてコミットする際、任意の入力が無ければ “Update README.md” のように行われた事実がコミットメッセージになりますよね。 これをコマンドラインでの作業でもやりたいと思って簡単なスクリプトを書きました。 nobuyo/committer git statusからステージングされている変更を拾ってきてコミットメッセージとして返してくれます。 簡素な仕様ですが、分かればいい程度で自分だけのリポジトリをちょっと書き換えるときに若干べんりです。 例えば以下のような感じになります。変更の事実がそのままコミットメッセージになっている様子が確認できます。 git本体へのオプション等には干渉しないので、ステージされた変更があるのにgit commit -amしたときなんかはコミットの精度が低下します。 % git status On branch master Your branch is up-to-date with ‘origin/master’. Changes not staged for commit: (use "git add <file>…" to update what will be committed) (use "git checkout – <file>…" to discard changes in working directory) modified: .zshrc no changes added to commit (use "git add" and/or "git commit -a") % git commit -am "$(committer)" # here [master 8e3fa69] modify .
Continue reading

きっかけ 一般ユーザーでUbuntuを利用していて、gitが使えなくてつらかった。 gitをビルド なければソースからコンパイルしましょう。管理者権限がないために、依存パッケージのインストールにもパッケージマネージャが使えないという制約がありますので、そのあたりも一緒にインストールします。最終的にインストールする必要があるものは次のとおり。(環境によっては増減があるかもしれません。) zlib openssl curl(libcurl) expat git ソフトウェア5つをすべてwgetしてtarで展開してconfigureしてmakeして…とやっていると大変なので、順番どおりにやってくれるbashスクリプトを使いましょう。 野原のようなシステムにgitを持ってピクニックに行こう、ということでpicnicと名づけました(n番煎じ)。 nobuyo/picnic ハマったところ ビルドは成功してもcloneできなかった問題でドハマりしました。 git clone https://… Cloning into ‘~~~’ fatal: Unable to find remote helper for ‘https’ libcurl-devパッケージの不足またはgitのビルド時にhttpsプロトコルを扱うcurlのライブラリが正しくリンクされないことが原因で起こる現象の様ですが。 環境変数LD_LIBRARY_PATHをexportして解決しました。
Continue reading

Author's picture

nobuyo

student of nit

JS/Rails

Nagano, Japan