ページ

title

告発\金沢地方検察庁\最高検察庁\法務省\石川県警察御中
弁護士と裁判官が共同で確定させた傷害・準強姦被告事件判決の再捜査要請に係る石川県警察珠洲警察署提出書面の情報公開

殺人未遂事件幇助の被告訴人: 木梨松嗣弁護士(金沢弁護士会)、岡田進弁護士(金沢弁護士会)、長谷川紘之弁護士(金沢弁護士会)、若杉幸平弁護士(金沢弁護士会)
名誉毀損罪の被告訴人: モトケンこと矢部善朗弁護士(京都弁護士会)、小倉秀夫弁護士(東京弁護士会)
市場急配センター株式会社 石川県金沢市駅西本町5丁目10番20所在
作成管理者: 石川県鳳珠郡能登町字宇出津 廣野秀樹
金沢地方検察庁御中

2021年2月9日火曜日

パソコン・情報公開### RubyのARGFオブジェクトを使って,ディレクトリ内のzshグロブにマッチした全てのテキストファイルを正規表現で置換

パソコン・情報公開### RubyのARGFオブジェクトを使って,ディレクトリ内のzshグロブにマッチした全てのテキストファイルを正規表現で置換

:CATEGORIES: Ruby #正規表現

```
cat << 'EOS' | ruby -i -e 'puts ARGF.read.gsub(/(.*cond = http(.*\n)+?[ ]*fi\n)/, "\\1#{STDIN.read}")' test.sh
if [ $cond = https ];then
port=443
fi
EOS
```

- Rubyやsedで複数行の文章を任意の箇所に挿入する - grep Tips * [https://www.greptips.com/posts/1170/](https://www.greptips.com/posts/1170/)

 ARGVはよく使いますが,ARGFというのは初めて見たように思います。もう15年以上はRubyを使っていると思いますが,今日まで知らなかったことが驚きです。上記のページのワンライナーで知りました。

 ARGFを調べたところ,引数を全てファイルとみなし連結して処理するような説明でしたが,Shiftで一つずつ取り出すという情報もあり,試したところ,ファイルグロブ(Windowsのワイルドカードと似たもの)で指定したファイルを1つずつ読み込んで処理をしているようでした。

 この理屈だとより強力なZshグロブで,ディレクトリ内のファイルを一括で置換できるのではと考え,やってみたところうまく行ったようです。これまではfindコマンドにexecオプションとsedの組み合わせなどの処理をしてきたように思いますが,より簡単に出来そうな感じです。

 次のようにやってみました。

```
(py37_env) ➜ ruby-2020-02-09 date > x.txt
(py37_env) ➜ ruby-2020-02-09 cat x.txt
2021年 2月 9日 火曜日 15:50:04 JST
(py37_env) ➜ ruby-2020-02-09 cp x.txt dir*/
(py37_env) ➜ ruby-2020-02-09 cp x.txt dir*/dir*/dir*/
(py37_env) ➜ ruby-2020-02-09 ls **/x.txt
dir1/dir2/dir3/x.txt dir1/x.txt x.txt
(py37_env) ➜ ruby-2020-02-09 cat **/x.txt
2021年 2月 9日 火曜日 15:50:04 JST
2021年 2月 9日 火曜日 15:50:04 JST
2021年 2月 9日 火曜日 15:50:04 JST
(py37_env) ➜ ruby-2020-02-09 echo "追加のテスト" | ruby -i -e 'puts ARGF.read.gsub(/(^.+$)/, "\\1 -> #{STDIN.read}")' **/*.txt
(py37_env) ➜ ruby-2020-02-09 cat **/x.tx
2021年 2月 9日 火曜日 15:50:04 JST -> 追加のテスト

2021年 2月 9日 火曜日 15:50:04 JST -> 追加のテスト

2021年 2月 9日 火曜日 15:50:04 JST -> 追加のテスト

(py37_env) ➜ ruby-2020-02-09 readlink -f **/x.txt
/home/a66/w/ruby-2020-02-09/dir1/dir2/dir3/x.txt
/home/a66/w/ruby-2020-02-09/dir1/x.txt
/home/a66/w/ruby-2020-02-09/x.txt
```

 処理を単純にするためechoコマンドを使いましたが,次のようにcatコマンドを使えば,テキストファイルの内容を追加することが簡単に出来ます。

```
(py37_env) ➜ ruby-2020-02-09 cat m | ruby -i -e 'puts ARGF.read.gsub(/(^.+$)/, "\\1 -> #{STDIN.read}")' **/*.txt
(py37_env) ➜ ruby-2020-02-09 cat **/x.txt
2021年 2月 9日 火曜日 15:50:04 JST -> 追加のテスト -> /home/a66/w/ruby-2020-02-09/dir1/dir2/dir3/x.txt
/home/a66/w/ruby-2020-02-09/dir1/x.txt
/home/a66/w/ruby-2020-02-09/x.txt


2021年 2月 9日 火曜日 15:50:04 JST -> 追加のテスト -> /home/a66/w/ruby-2020-02-09/dir1/dir2/dir3/x.txt
/home/a66/w/ruby-2020-02-09/dir1/x.txt
/home/a66/w/ruby-2020-02-09/x.txt


2021年 2月 9日 火曜日 15:50:04 JST -> 追加のテスト -> /home/a66/w/ruby-2020-02-09/dir1/dir2/dir3/x.txt
/home/a66/w/ruby-2020-02-09/dir1/x.txt
/home/a66/w/ruby-2020-02-09/x.txt
```

0 件のコメント:

コメントを投稿