Windows Update エラー

イメージ
インストールエラー 0x80070306 はい、また出ました。 最近のMicrosoftの品質管理はどうなってしまったのでしょうか? 今回は、KB5079473を入れようとして、エラー。 再試行してエラー。 日をおいて試してもエラー。 ということで、Updateのたびにエラー表示されるのもイラッとするので、修正する。 まずは、 管理者でコマンドプロンプトを開く dism /online /cleanup-image /restorehealth sfc /scannow を実行する。 イメージのバージョンが異なっているので、更新したかいが有るとよいが…。 sfcは若干時間がかかるが、まぁチェックだけはしておこう。 続いて、 設定 → システム → 回復 → Windows Updateで問題を解決する → 今すぐインストール これを実行すると、Windows Updateの画面が開き、以下のような作業が始まる。 修復バージョンをダウンロードして、それで書き込むっぽい 結構時間がかかりますが、まぁ順調に進みます。 完了すると「再起動」しろと言ってくるので、再起動を実施。  ↓ サインイン画面でサインイン  ↓ ここが、いつもの10倍くらい時間がかかった。  ↓ 無事にデスクトップが表示される 「更新プログラムのチェック」を押しても何も候補は出てこなくなる。

sed:改行含む文字列への置換

少し苦戦した…

すでにコンテンツのあるサイトのドメイン移転とサーバ変更、管理の委託を依頼されて作業を行う。
  1. ドメイン移管
  2. サーバの変更
  3. コンテンツの設置
  4. メールアカウントの設定
以上は、問題なく完了。

さて、あとはコンテンツの修正。

アクセス解析にGoogle Analyticsを利用するのだけれど、これまでの業者さんは未設置。
そこで、各ページに仕込む必要があるけれど、いちいち修正するのはさすがに面倒。
なにせ30ページ程のhtmlが2つもある。

こんな時は、sedの登場ですな。

まずは、jsフォルダを作成。
以下のような内容のg_ana.jsを作成。まぁ、ここまでは、Google Analyticsの吐き出すコードをほんの少し変更するだけでOK
 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-xxxxxxxxx', 'auto');

  ga('send', 'pageview');

でもって、こいつを読み込むように各htmlに書き込む。

とりあえず、</head>の前に設置すれば良いので、
<script type="text/javascript" src="js/g_ana.js"></script></head>
に置換をかければ良いわけだ。

sedで処理する

60回以上も「ファイルを開く」→「編集(貼付けるだけなんだけど)」→「保存」なんてやってられない。

$ sed s#</head>#<script type="text/javascript" src="js/g_ana.js"></script></head># ./index.html | less

で確認してみる。
とりあえず、OKなのを確認。

まあ、これで何も問題はないのだけれど、ソースを見た時に</head>の位置が気持ち悪い。(美しくない)

<script type="text/javascript" src="js/g_ana.js"></script>
</head>

こうなっていて欲しい。</script>と</head>の間に改行を入れたいちゅうわけだ。
こんなもの、\nを含めて置換すりゃ一発と思ったのだけれど、これが上手くいかない。

$ sed s#</head>#<script type="text/javascript" src="js/g_ana.js"></script>\n</head>#

結果を見ると、</script>n</head> 改行されない。しかも\n→n になってるだけやんか…。

試行錯誤を、繰り返す。
繰り返す
繰り返す×10…

苦戦したわ。
最終的には、以下の用に記述すればOKだった。
$ sed 's#</head>#<script type="text/javascript" src="js/g_ana.js"></script>'\\$'\n''</head>#'

置換文字列は、A+改行+Bの構成になっている。
置換したい文字列に"(ダブルクォート)が含まれているので、基本的には’(シングルクォート)で囲んでいる。

A='s#</head>#<script type="text/javascript" src="js/g_ana.js"></script>'
改行=\\$'\n\
B='</head>#'

という形でOK。

最後に罠が…

これでOKだろうと思ったが、実際に書きだす前に最終確認。

$ sed 's#</head>#<script type="text/javascript" src="js/g_ana.js"></script>'\\$'\n''</head>#' *.html

index.htmlは問題なく置換したが、途中でERRORを吐いた。
sed: RE error: illegal byte sequence
なぬ?
よく調べてみると、文字コードがUTF-8だけでなく、EUC-JPで書かれたコンテンツが混ざっている。

こらこら。
文字コードまで変換するのは、もっと面倒。なので、そのまま置換したい。

先頭におまじないを付けてやることで回避した。

LC_ALL=C sed 's#</head>#<script type="text/javascript" src="js/g_ana.js"></script>'\\$'\n''</head>#' *.html

これで、文字コードが混在していてもOK。

最終的には、以下のコードを実行。

LC_ALL=C sed -i.bak 's#</head>#<script type="text/javascript" src="js/g_ana.js"></script>'\\$'\n''</head>#' *.html

-i.bakオプションで、元のhtmlをhtml.bakにして保存する。

まあ、当然コピーで作業しているから、不要なんだけど、あとですぐdiffしたいし、ミスがあったら書き戻せるようにしておきたいからね。

ちゅうことで、60回以上エディタで書き換える作業をすること無く、終了。

時間的には、少し短いくらいかもしれないけど、精神衛生上極めて気持ちがいい。
改行1つに拘らなければ、1分で作業完了だったけど…(笑)






コメント

このブログの人気の投稿

Ubuntu24.04 でGUIが死んだ

VirtualBoxが異常

MEGAにも弱点があった?