BSD sed のメモ。初歩的な部分に関しては触れていないこともあります。動作説明などについては間違ってる部分もあるかもしれませんので気になったら自分で試してみて下さい。つぎはぎ状態なのでそのうち整理します。 オプション オプション 動作
diff コマンド 2016/07/23 2つのテキストファイルの差分を抽出するコマンド。 2つのファイルの内容が一致しているかどうかをチェックする目的でも使える。 編集前のファイルをバックアップしておけば、編集後のファイルとバックアップとをdiffすることで、編集した箇所を確認できる。まあ、そんなことしなくても git や svn などのバージョン管理を使っていれば、差分は確認できるが。 diffコマンドをブラウザで使えるウェブアプリもあるようだ。 テキスト比較ツール difff《デュフフ》 http://difff.jp/ 基本的な使い方 2016/07/19 2つのファイル名を引数で渡すと、差分が標準出力される。 $ diff -u foo.txt bar.txt 片方のファイル名として - と書くと、標準入力が使われる。 $ foocmd | diff -u - bar.txt
sudo コマンドの "-i" オプションと "-E" オプションについてメモ。 ・Man page of SUDO https://linuxjm.osdn.jp/html/sudo/man8/sudo.8.html ■ -i オプションについて ドキュメント曰く パスワード・データベースの変身対象ユーザの項目でログイン・シェルとして指定されているシェルを実行する。すなわち、 .profile や .login といったログイン用のリソース・ファイルが、 シェルによって読み込まれることになる。 とのこと。これを指定すると $HOME/.bash_profile なりが読み込まれるということのようです。 動作確認を。 # cat /tmp/env/test.sh #!/bin/sh echo $ETC_PROFILE echo $BASH_PROFILE # cat /etc/profil
これまでの反省 OpenSSLを使ってオレオレ証明書を作った経験は何度かあるのですが、先人がネットで紹介されていた手順のとおりに操作しただけで、各サブコマンドの機能や設定、オプションの意味など何も理解していませんでした。 今回、多数のプライベートCAとクライアント証明書をスクリプトで自動作成することになったので、これを機会にopensslコマンドの勉強を始めました。 なぜopensslコマンドが難しいのか 個人的に難しいと思う点をまとめたらこんなにありました… コマンド(サブコマンド)の数が多く、しかも機能が重複している OpenSSLコマンド(1.0.2): https://www.openssl.org/docs/man1.0.2/man1/ 同じ目的のための方法がいろいろある 例えば証明書発行を [秘密鍵を作成] → [署名要求を作成] → [署名して証明書を発行] と3手順で行う方
dateコマンドで日付計算するときに、「1ヶ月前」「1日後」といった構文は便利なのでよく使うのだが、今回この「1ヶ月前」指定をなんとなく使っていて、まずい動きをすることがあったのでメモ。 どういうときにまずいかというと、「日付を比較する基準日が前月のカレンダー上にない場合」の挙動である。例えば、3月31日の前月は、2月31日ということになるが、この日付はカレンダー上存在しないため、結果はなんと3月3日になってしまう。(2月28日 + 3日という計算ロジックなのだろう。。) 具体的に実行結果を見てみる。 まず、普通に実行すると、以下のように正しく1ヶ月前を取得することができる。 $ date +'%Y-%m-%d' 2015-07-30 $ date -d '1 month ago' +'%Y-%m-%d' 2015-06-30次に、3月31日の1ヶ月前を取得してみる。 $ date -d
これは、複数のマッチングが考えられる場合なるべく長いものにマッチする(最長一致)からである。この性質はsedに限ったことではなくて正規表現全般に言えることで、デフォルトでは最長一致である。 最短一致を利用するためのオプションを持つ言語もあるが、sedには無いので何らかの工夫が必要となる。今回の場合は、閉括弧が現れた時点で一旦マッチングをやめるようにすればいいので、以下のように書くと思惑のデータがえられる。
2007/11/10更新 対応バージョン: 6,7,8 sshfsを使用するには基本的にクライアント側での設定だけでよく、サーバ側ではsshdが起動していて必要に応じてsftp-serverが起動するようになっていればよい。 以下、クライアント側の設定を示す。 fuse-sshfsパッケージインストール # yum install fuse-sshfs 各種パーミッション変更 # chmod o+rw /dev/fuse これを実行しないとsshfs実行時に「fuse: failed to open /dev/fuse: Permission denied」というエラーになる。 # chmod 4755 /bin/fusermount これを実行しないとsshfs実行時に「fuse: failed to exec fusermount: Permission denied」というエラーにな
404 error お探しのページは移動もしくは削除された可能性がございます。 The page has might be moved or deleted.
改行コード変換はtrやPerlを使うやり方がよく知られているけど、AWKだと、RS (input record separator) や ORS (output record separator) を使うと柔軟に変換できるようだ。 awk -v ORS='\r\n' '{print}' < lf.txt > crlf.txt awk -v RS='\r\n' '{print}' < crlf.txt > lf.txt awk -v RS='\r' '{print}' < cr.txt > lf.txt awk -v RS='\r' -v ORS='\r\n' '{print}' < cr.txt > crlf.txt
たとえば {"users":[{"id":1,"name":"taro"},{"id":2,"name":"hanako"}]} のようなJSONがあったとして、 1 taro 2 hanako のように整形して表示させたかった 結論(2020年8月30日追記) jq単体でできた。コメントしてくださった方ありがとうございます cat test.json| jq '.users[] | (.id|tostring) + " " + .name' -r jqコマンド内でパイプのように繋げる方法があった。idでtostringしているのはJSONの数値型だとjqが認識してしまうため。実際つけないと jq: error (at <stdin>:1): number (1) and string (" ") cannot be added とエラーになる。 以下過去の戯れ言 結論 jq単体ではできな
[Linux] => [シェルスクリプト] echoで出力した文字は最後に改行されてしまいますが、-nオプションをつければ改行されずに出力されます。 « $# - 引数の個数 | | 数値比較演算子 »
sedで複数行置換を行うにはNを使えば良いが、1行目の検索文字列が続けて複数ある場合は少し工夫が必要になる。たとえば、 (改行) (改行) (改行) 文字列のようなケースだ。 sedだけで置換改行+文字列にマッチさせたい場合は、ループを使って改行+文字列までたどり着くようにしてから検索置換を実行する。 sed -i '/^$/N; :loop; /\n$/{N; b loop}; s/\n検索文字列/置換文字列/' ファイルそれぞれの意味は以下のようになる。 /^$/N; 空行にマッチしたら次の行を読み込む:loop; ジャンプ先ラベル/\n$/{N; b loop}; 改行を読み込んだらもう一行読み込んでloopにジャンプ s/\n検索文字列/置換文字列/ そうでなかったら検索置換を実行これで直前1つの改行だけを対象に検索置換が行える。 たとえば、<body>タグの直前の改行を1つだけ削
以下の記事でcp/mvコマンドの進捗状況を表示する方法が紹介されていて非常に便利だと思ったので,ここでも紹介しときます! control+Tを押すだけ! 進捗状況を表示する方法は超簡単! cp/mvが進行中のターミナル上で, control + T と押すだけ!すると以下のように進行状況が表示されます! $ cp huge-file.zip ./tmp/ # このコマンドを実行してからcontrol+Tを押す load: 2.20 cmd: cp 12025 running 0.00u 0.20s huge-file.zip -> ./tmp/huge-file.zip 37% 容量のデカイファイルのコピー・移動時なんかには重宝します^^ Mac以外のユーザのための方法 ちなみにこの方法,Macでしか使えないそうです. けど,ちゃんとLinuxとかでも経過表示を可能にする方法があるみたいで
grepの-lオプションと-Lオプション。マニュアルを見ると、それぞれ以下のように説明されている。 -l, --files-with-matches 通常の出力はしません。その代わりに、grepを普通に実行した際に、何らかの検索結果を表示する ような入力ファイルの名前を列挙します (訳注: すなわち、-lオプションを指定すると、-vオプシ ョンを同時に指定しない場合は、パターンにマッチする文字列を含む行が存在するファイルの名前 を列挙するということです)。 個々のファイルに対する走査は、最初のマッチで終了します。 (-l オプションは POSIX で規定されています) -L, --files-without-match 通常の出力はしません。その代わりに、grepを普通に実行した際に、何の検索結果も表示しないよ うな入力ファイルの名前を列挙します (訳注: すなわち、-Lオプションを指定す
形式 sort[-c|-m][-b][-f][-n][-r][-u][-z] [-k 開始位置[,終了位置]][-o 出力先パス名] [-T 一時ファイルディレクトリ][-t フィールド区切り文字] [入力パス名 ...] 機能 ファイルや標準入力から入力して,次のどれかの処理を実施します。実行結果を標準出力に出力します。 ソート マージ ソートされているかのチェック 引数 動作モードの指定 動作モードの指定をするオプションを省略すると,ソートします。ソートを昇順にするか降順にするかは,-rオプションの有無で指定します。 -c 指定したファイルに対してソートされているかどうかチェックします。チェック機能は,1つのファイルが正しくソートされているかどうかを判定します。 ソートされている場合は,戻り値0で終了します。ソートされていない場合は,標準エラー出力にメッセージ(sort: found
Perl ワンライナーでシェル変数を渡すには -s オプションを使えばよい。 書式 perl -se '...' -- -Perlで使う変数名=シェル変数名 実行例 $ FOO=bar; perl -sle 'print $var' -- -var=$FOO bar 参考 sオプションを使います echo -e "hogehoge\nfugafuga" > myfile.txt var="hogehoge\n";cat myfile.txt | perl -pse 's/$shell_var//' -- -shell_var=$var [小ネタ]perlワンライナーにシェル変数を渡す - Qiita -s コマンドライン上のプログラム名の後から、ファイル名引数 (または引数 --) の前までのスイッチのための、原始的な解析を 行なえるようにします。 ここで見つかったスイッチは、@ARGV
ちょっとした日本語出力がエスケープコードになってイラッとすることがある。 そのたびにツールをさがしたり変換スクリプトを書いてしのいできたが 実はコマンドの echo -e や printf で手間なしでデコードできることを最近知った。 $ /usr/bin/printf '\xef\xbc\x91\xef\xbc\x96\xe9\x80\xb2\xe6\x95\xb0 \357\274\230\351\200\262\346\225\260 \u30e6\u30cb\u30b3\u30fc\u30c9 \n' 16進数 8進数 ユニコード $ printf '\xef\xbc\x91\xef\xbc\x96\xe9\x80\xb2\xe6\x95\xb0 \357\274\230\351\200\262\346\225\260 \u30e6\u30cb\u30b3\u30fc\u30c9
So I've been using 'sed' on linux for a while, but have had a bit of difficulty trying to use it on OSX since 'POSIX sed' and 'GNU sed' have so many little differences. Currently I'm struggling with how to insert a line of text after a certain line number. (in this case, line 4) On linux I would do something like this: sed --in-place "4 a\ mode '0755'" file.txt So on OSX I tried this: sed -i "" "4
はじめに 最近、bash, awk, jqにお世話になっております。 特にawkは使い始めたばかりなので、awkを使ってワンラインでexcelのvlookup的なことをやりたいときにどうすればよいのかわからなくて、excelで頑張ってたりしてました。 でもエンジニアならば、excelなんて使わなくてもコマンドラインでぱぱっと操作できたほうが格好いいじゃない?と思ったので挑戦してみます。 目標 以下の2つの表を想定する。 ユーザ一覧を格納した表(users.csv) id name -- ---- 1 一郎 2 二郎 3 三郎 4 四郎 何かしらの条件をみたしたIDの表(condition.csv) id -- 2 4 この2つの表から以下を得たい。 ゴール id name condition -- ---- ---- 1 一郎 F 2 二郎 T 3 三郎 F 4 四郎 T conditio
先日はまったのでメモ。 みなさん! UNIX系のコマンドに find ってのがありますが、このコマンドはカレントディレクトリへの読み込み権限がないとエラーになるって知っていました? [root] # mkdir foo; chmod 700 [root] # cd foo [root] # su hanako [hanako] $ ls -l ls: .: Permission denied (ls: .: 許可がありません) [hanako] $ find /tmp find: cannot get current directory: Permission denied (find: カレントディレクトリが取得できません: 許可がありません) /tmp を見たいだけなのに・・・・。 ちなみに再現環境は以下のとおり CentOS 5.3 findutils-4.2.27-6.el5 –
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く