PythonでJSONファイルの日本語キーを読む方法

November 14,2019 11:55 PM
Category:[Python]
Tag:[JSON, Python]
Permalink

PythonでJSONファイルの日本語キーを読む方法を紹介します。

1.問題点

次のJSONファイルがあります。文字コードはUTF-8です。

sample.json

{
"内容" : "工事",
"情報" : [
  {
  "番号" : "123",
  "名前" : "東京"
  },
  {
  "番号" : "456",
  "名前" : "大阪"
  } ]
}

このファイルを読み込み、"東京"というデータを表示するPythonスクリプト(sample.py)を作りました。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import sys
import json
 
# 引数取得
args = sys.argv
 
# JSONファイルオープン,パース
f = open(args[1], 'r')
data = json.load(f, 'utf-8')
f.close()
 
print json.dumps(data["情報"][0]["名前"], ensure_ascii=False)

が、実行すると次のようなKeyErrorになります。

# ./sample.py sample.json
Traceback (most recent call last):
  File "./sample.py", line 14, in 
    print json.dumps(data["情報"][0]["名前"], ensure_ascii=False)
KeyError: '\xe6\x83\x85\xe5\xa0\xb1'

ということで、PythonでJSONファイルの日本語キーを読む方法を紹介します。

2.日本語のキーを読む

PythonでJSONファイルの日本語キーを読むには、JSONを取得する際のキーに"u"を付与します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import sys
import json
 
args = sys.argv
 
# JSONファイルオープン,パース
f = open(args[1], 'r')
data = json.load(f, 'utf-8')
f.close()
 
print json.dumps(data[u"情報"][0][u"番号"], ensure_ascii=False)

実行結果

# ./sample.py sample.json
"東京"
Comments [0] | Trackbacks [0]

bashで小数点を比較する方法

November 6,2019 11:55 PM
Category:[bash]
Tag:[bash, linux]
Permalink

bashで小数点を比較する方法を紹介します。

1.問題点

小数点を比較したいのですが、下記の構文では期待する結果になりません。

#!/bin/bash
 
A=0.1
B=0.2
 
if [ $A -gt $B ]; then
    echo "A > B"
else
    echo "A <= B"
fi

実行結果

./test.sh
./test.sh: line 6: [: 0.1: 指数の表現を期待
A <= B

ということで、bashで小数点を比較する方法を紹介します。

2.bashで小数点を比較する

bashで小数点を比較するには、echoとbcコマンドを組み合わせます。

#!/bin/bash
 
A=0.1
B=0.2
 
if [ `echo "$A > $B" | bc` == 1 ]; then
    echo "A > B"
else
    echo "A <= B"
fi

実行結果

./test.sh
A <= B

bcは計算を処理するコマンドです。

if文の説明ですが、まず、

echo "$A > $B" | bc

で、変数Aと変数Bを比較し、結果を表示してくれます。

結果が偽(A <= B)であれば0、真(A > B)であれば1を出力します。

あとは出力結果(0または1)を判定すればOKです。

今回のサンプルでは、

if [ `echo "$A > $B" | bc` == 1 ]; then

なので、A > Bであればthenを実行し、A <= Bであればelseを実行します。

Comments [0] | Trackbacks [0]

Thunderbirdで重複メールを削除する方法

October 24,2019 11:55 PM
Category:[Thunderbird]
Tag:[Thunderbird]
Permalink

Thunderbirdで重複メールを削除する方法について紹介します。

1.はじめに

何かの拍子に受信メールが重複しまいました。

数千件あるので手作業ではなくツールなどを使って一括削除したいのですが、方法がわかりません。

ということで、Thunderbirdで重複メールを削除する方法について紹介します。

2.重複メールを削除する

Thunderbirdで重複メールを削除するには、拡張機能「Remove Duplicate Messages」を利用します。

Thunderbirdの「ツール」→「アドオン」を選択し、検索ボックスに「Remove Duplicate Messages」を入力して検索。

表示された「Remove Duplicate Messages」の「インストール」をクリック(インストール後は要再起動)。

重複メールを削除したいフォルダを選択し、「ツール」→「重複メッセージの削除」を選択。

すべての重複メールが検出されるので、問題なければ「OK」をクリック。

(クリックで拡大)

これで重複メールが削除されました。

重複メールの検出方法は「ツール」→「アドオン」→「拡張機能」→「Remove Duplicate Messages」の「設定」をクリックすればカスタマイズできます。

Comments [0] | Trackbacks [0]

iPhoneでセルフタイマーを利用する方法

October 5,2019 11:55 PM
Category:[iPhone]
Tag:[iPhone]
Permalink

iPhoneでセルフタイマーを利用する方法を紹介します。

1.はじめに

以前のiPhoneではデフォルトでセルフタイマーの表示がありました。

以前のiPhone

が、iPhone11に買い替えたところ、セルフタイマーの表示がなくなりました。

セルフタイマーがない

ということで、iPhoneでセルフタイマーを利用する方法を紹介します。

2.iPhoneでセルフタイマーを利用する

iPhoneでセルフタイマーを利用するには、カメラアプリ上部にある^のアイコンをタップ。

カメラアプリ上部にある^のアイコンをタップ

これでアプリの下にセルフタイマーなどのオプションが表示されます。

オプションが表示

なお、アスペクト比(画面の縦横比)などの各オプションもここに表示されます。

Comments [0] | Trackbacks [0]

Linuxでダミーファイルを作成する方法

October 3,2019 11:55 PM
Category:[Linux]
Tag:[Linux]
Permalink

Linuxでダミーファイルを作成する方法を紹介します。

1.問題点

開発システムの試験のため、Linux上でサイズの大きな(数GB)ダミーファイルを作成する必要が生じました。

が、短時間でサイズの大きいファイルを作成する方法が分かりません。

ということで、Linuxでダミーファイルを作成する方法を紹介します。

2.ダミーファイルを作成する

ダミーファイルを作成するにはddコマンドを利用します。

ここでは1GBのダミーファイルを作成するサンプルを紹介します。

$ dd if=/dev/zero of=name bs=1M count=1000

ddは、ブロック単位でファイルを読み出し、オプション指定にしたがって変換し、ファイルに書き出すコマンドです。

以下、サンプルで指定したオプションの説明です。

"if"は、ファイル(またはデバイス)からデータを読み出すオプションです。"/dev/zero"はNULL文字(0x00)を出力し続けるという特殊なデバイスです。

"of"は標準出力の代わりにファイル(またはデバイス)へ書き込むオプションです。

"bs"は、1回に読み書きするブロックサイズ(バイト数)を指定するオプションです。ここでは"1M"を指定しているので、1回につき1MBを読み書きします。

"count"は、bsで指定したサイズのブロックを繰り返す回数を指定するオプションです。ここでは"1000"を指定しているので、1000回繰り返します。

これにより1MB×1000=1GBの、NULL文字だけのダミーファイルを作成することができます。

Comments [0] | Trackbacks [0]

Wix ADIの使い方

September 16,2019 11:55 PM
Category:[Wix]
Tag:[Wix]
Permalink

Wix ADIの使い方について紹介します。

wix

1.はじめに

Wix(ウィックス)は、2006年に設立された企業で、Wix.comではドラッグ&ドロップ形式の無料ホームページ作成ツールを提供し、世界で1億人以上が利用するオンラインプラットフォームとなっています。

2.Wix ADIとは

Wix ADIは、「Wix Artificial Design Intelligence」の略で、素敵なサイトをデザインしてくれるための人工知能です。

具体的には、業種・職種、好みのデザインなどの質問に答えるだけで、AIが数あるレイアウト、画像、テキストの中から最適なものを組み合わせ、プロ顔負けのサイトを作ってくれます。

ということで、以下、Wix ADIを使ったサイトの作成手順を紹介します。

ここでは事前にアカウントを作成している例で説明します。

3.作成手順

Wixのサイトから「ログイン」または「新規登録」をクリック。

(クリックで拡大、以下同様)

ログイン画面が表示されるのでログインします。

右上の「新しいサイトを作成」をクリック。

「どんなホームページを作成しますか?」の画面に切り替わるので、ここでは「ネットショップ」を選択します。

「どちらの方法でホームページを作成しますか?」の画面に切り替わるので、「Wix ADIで自動作成」をクリック。

「ビジネスまたはサイトの種類を選択」画面になるので、検索画面に「時計」を入力。

候補が表示されるので、「時計店」を選択。

「次へ」をクリック。

作成するサイトに追加するアプリが表示されるので、追加したいアプリのチェックボックスをチェックして「次へ」をクリック。ここでは「チャット」と「ブログ」をチェックします。

ビジネス名またはサイト名を入力して「次へ」をクリック。ここでは「腕時計専門店KOIKI」と入力します。

作成するウェブサイトで使用する画像やテキストをインポートします。入力したら「次へ」をクリック。

ロゴ・メールアドレス・住所・電話番号など必要な情報を入力します。ここでは架空のデータを設定しておきます。

スタイルを選択して「次へ」をクリック。ここでは「フォレスト」を選択します。

ロゴからカラーパレットを作成します。ここでは「パレットを作成」をクリック。

パレットが作成されたので「このカラーを使用」をクリック。

パレットにもとづいたデザインが表示されるので任意のデザインをクリック。ここでは真ん中のデザインを選択します。デザインをマウスでポイントした時点で編集画面に移動することもできます。

これでサイトのデザインが出来上がりました。

サイトで編集したいセクションをマウスでポイントすると、セクションに編集ボタンなどが表示されます。セクション右上の↑↓の矢印はブロック全体のレイアウトを移動するときに使います。ここでは「編集」ボタンをクリックしてみます。

選択したセクションの編集画面に遷移します。タイトル・サブタイトル等の変更やメディアの編集が行えます。前の画面に戻るには、左メニューの右上にある×印をクリックしますが、この状態で右側に表示されたセクションをクリックすれば、左メニューを表示したまま別のセクションを続けて編集することができます。

右側の選択セクションから「デザイン」ボタンをクリックすると、セクションのデザイン編集画面に遷移し、様々なレイアウトのデザインから選択できます。

商品情報を編集するには、「商品リスト」セクションの編集画面に移動し、編集したいアイテムをクリック。

右側の商品アイコンのクリックでも同じように編集できます。

サイトの編集が完了したら、右上の「公開」をクリック。

ドメインを設定して「公開して続行」をクリック。

「サイトを見る」をクリック。

これでサイトが公開されました。

3.感想

Wix ADIを利用することで、より簡単にサイトを作成できるようになります。

サイト作成の手順もほぼ直感的に行えます。

WordPressのテーマと比較すると、WordPressではワンクリックでデザインを選択できますが、テーマの選択に手間取ることや、選択後のレイアウトやデザインのカスタマイズにはハードルがあります。

Wix ADIでは、サイト内のセクション単位にデザインのカスタマイズが柔軟に行え、レイアウトの変更も簡単に行えるので、おすすめです。

Comments [0] | Trackbacks [0]

Windowsでタスクマネージャを起動する6つの方法

September 9,2019 11:55 PM
Category:[Windows]
Tag:[Windows]
Permalink

Windowsでタスクマネージャを起動する6つの方法を紹介します。

タスクマネージャ

1.はじめに

Windowsでタスクマネージャを起動するには、例の3つのキーを同時に押す方法が有名です。

が、この方法で会社のシンクライアントでログインし、さらにリモートデスクトップでログインしたWindowsではこの方法(厳密にはCtrl + Alt + End)が効かず、色々調べたところ、他にもタスクマネージャの起動方法があることを知りました。

ということで、本記事で6つの方法を紹介します。

2.その1:Ctrl + Alt + Delete

ひとつめは皆さんご存知の「Ctrl + Alt + Delete」です。

このキーを同時に押すと画面が切り替わるので、「タスクマネージャ」を選択します。

タスクマネージャ

3.その2:Ctrl + Shift + Esc

「Ctrl + Shift + Esc」キーを同時に押せば、タスクマネージャが即起動します。

1番目の方法より手順がひとつ少ないのでこちらがおすすめです。

4.その3:ファイル名を指定して実行

スタートボタンを右クリックし、「ファイル名を指定して実行」をクリック。

タスクマネージャ

名前欄に「taskmgr」と入力し「OK」をクリックすればタスクマネージャが起動します。

5.その4:タスクバーを右クリック

タスクバーを右クリックすれば、コンテキストメニューに「タスクマネージャ」が表示されます。

タスクマネージャ

これを選択すればタスクマネージャが起動します。

6.その5:検索フォーム

タスクバーの検索フォームに「task」と入力すれば「タスクマネージャ」が表示されるので、それをクリックすればタスクマネージャーが起動します。

7.その6:スタートメニュー

「スタート」→「Windowsシステムツール」をクリックし、「タスクマネージャー」をクリックすればタスクマネージャーが起動します。

Comments [0] | Trackbacks [0]

VirtualBoxのホストOSからゲストOSにSSH接続する方法

August 29,2019 11:55 PM
Category:[VirtualBOX]
Tag:[CentOS, VirtualBOX, Windows]
Permalink

VirtualBoxのホストOSからゲストOSにSSH接続する方法を紹介します。

1.はじめに

VirtualBox(Windows版)にCentOSをインストールする方法」で、仮想マシンにCentOSをインストールする手順を紹介しました。

インストールした仮想マシンのOS(ゲストOS)に、ホストOSからSSHでアクセスしたいケースがあると思います。

ということで、本記事ではVirtualBoxのホストOSからゲストOSにSSH接続する方法を紹介します。

ここでのホストOSはWindows、ゲストOSはCentOSです。

また、本記事の設定を行う前に、「VirtualBox(Windows版)にCentOSをインストールする方法」を行ってください。

2.ネットワーク設定

まず、ホストOSからゲストOSにアクセスできるようにするため、仮想マシンのネットワークを設定します。

仮想マシンの電源オフ後、VirtualBox マネージャーにて、対象の仮想マシンを選択した状態で「設定」アイコンをクリック。

(クリックで拡大、以下同様)

左メニューから「ネットワーク」をクリック。

「アダプター2」タブをクリック。

下記を設定して「OK」をクリック。

  • ネットワークアダプターを有効化:チェック
  • 割り当て:ホストオンリーアダプター
  • 名前:選択されたままの内容(VirtualBox Host-Only Ethernet Adapter)

3.IPアドレスの確認

次に、ゲストOSにログインするIPアドレスを確認します。

ターミナル右上のアイコンをクリックして、1つめまたは2つめの「Ethernet(...)接続…」をクリックして「有線設定」をクリック。

2つめのEthernetの右側にある設定アイコンをクリック。

表示されたIPv4アドレス(192.168.56.101)をメモして、左上の「キャンセル」をクリック。

ネットワークの設定は右上の×印をクリックすれば閉じます。

設定はこれで完了したので、仮想マシンのOSを起動します。

4.ログイン

TeraTerm等で、先ほどメモしたIPアドレスを使ってゲストOSにログインします。

ここではrootでログインしてみます。

ログインできました。

WinSCPなどによるファイル転送も、このIPアドレスを設定すれば大丈夫だと思います。

5.注意事項

2項の「ネットワークの設定」でネットワークの設定をやり直すと、なぜかゲストOSにログインする時間が遅延するようです。

ネットワーク設定は1回できめましょう。

Comments [0] | Trackbacks [0]

VirtualBox(Windows版)にCentOSをインストールする方法

August 28,2019 11:55 PM
Category:[VirtualBOX]
Tag:[CentOS, VirtualBOX, Windows]
Permalink

VirtualBox(Windows版)にCentOSをインストールする方法について紹介します。

VirtualBox

1.はじめに

仕事でWindowsにVirtualBOXをインストールしてCentOSを利用する必要が生じました。

VirtualBOXはPCに仮想マシンを作成するソフトウェアで、インストールすることにより、仮想マシン上で複数のOSを動かすことができます。

VirtualBOXを一度も使ったことがなく、設定方法をネットで調べましたが、わかりやすいページがなかったのでこの記事にまとめました。

設定値には色々バリエーションがありますが、とりあえず説明通りに進めていけばCentOSがWindows上で動作すると思います。

VirtualBox自体のインストールは省略しています。予め済ませておいてください。

2.仮想マシンの作成

最初に仮想マシンの作成(OSの選択、メモリやディスクの設定等)します。

VirtualBox (Oracle VM VirtualBox マネージャー) を起動し、上部の「新規」をクリック。

(クリックで拡大、以下同様)

「仮想マシンの作成」ダイアログが開くので、下記を設定して、「次へ」をクリック。

  • 名前:任意の名前を入力
  • マシンフォルダー:表示されたまま
  • タイプ:Linux
  • バージョン:Red Hat (64bit)

メモリーサイズを設定して「次へ」をクリック。最低1024MB必要らしいです。ここでは2048MBにしています。

次に仮想ハードディスクの設定です。「仮想ハードディスクを作成する」を選択して「作成」をクリック。

「仮想ハードディスクの作成」ダイアログが開くので、ハードドライブのファイルタイプから「VDI (VirtualBox Disk Image)」を選択して「次へ」をクリック。

「固定サイズ」を選択して「次へ」をクリック。

仮想ハードディスクの容量を指定して「作成」をクリック。ここでは16.00GBとしました。

仮想ハードディスクが作成されます。

3.CentOSのインストール

次に、作成した仮想マシンにCentOSをインストールします。

VirtualBoxマネージャーに戻り、作成した仮想マシン(画面左側)が選択された状態で、上部の「起動」アイコンをクリック。

「起動ハードディスクを選択」ダイアログが開くので、プルダウンメニュー右のアイコンをクリックし、予めダウンロードしておいたCentOSのISOイメージファイルを選択。

「起動」をクリック。

CentOSのインストーラーが起動するので、Enterを押下(押さなければ一定時間経過後、自動で開始します)。

インストール時に使用する言語を選択します。下の検索窓に"j"と入力します。

ここで下記のダイアログが表示されると思います。ダイアログの説明にあるとおり、仮想マシン(CentOS)上でマウスポインタを操作しているときはホストマシン(Windows)の画面に戻れません。ホストマシンに戻るには右Ctrlキーを押下します。

仮想マシン画面上をクリックするとダイアログが毎回表示されるので、表示させたくない場合は「次回からこのメッセージを表示しない」をチェックして「キャプチャー」をクリック。

話を戻して、検索で「日本語 Japanese」が見つかるので、選択して「続行」をクリック。

インストールするソフトウェアを変更するので「ソフトウェアの選択」をクリック。変更しないと最低限のソフトウェアしかインストールされません。

ここでは「ベース環境」から「サーバー (GUI使用)」を選択して「完了」をクリック。インストールしたいアドオンがあれば、事前に右側のチェックボックスをチェックします。完了ボタンは左上にあるので、アラートの×印をあらかじめ消しておいてください。

「インストール先」をクリック。

何もせずに「完了」をクリック。

「ネットワークとホスト名」をクリック。

設定画面の右上にあるスイッチをオンにして「完了」をクリック。このスイッチをオンにしておかないと、Windowsから仮想マシンにアクセスするための設定が効かなくなります。

「インストールの開始」をクリック。

「ROOTパスワード」をクリック(この間、バックグラウンドでインストールが実行されています)。

任意のパスワードを設定して「完了」をクリック。

「ユーザーの作成」をクリック。

任意のユーザー名・パスワードを設定して「完了」をクリック。

しばらく待つと(「インストール後セットアップ作業を実行中」が特に長い)インストールが完了するので、画面右下の「再起動」をクリック。

4.セットアップ・ログイン

CentOSのインストール完了後、ライセンス承諾等を行えばログインできるようになります。

「LICENSING」をクリック。

「ライセンスに同意します」をチェックして「完了」をクリック。

右下の「設定の完了」をクリック

ログイン画面に切り替わるので、先ほど作成したユーザーを選択。

少し待つと「ようこそ」画面になるので、「日本語」を選択して「次へ」をクリック。

「入力」画面:「日本語」がチェックされた状態を確認して「次へ」をクリック

「プライバシー」画面:位置情報サービスのオンオフを選択して「次へ」をクリック

「オンラインアカウントへの接続」:接続したいサービスを選択して「次へ」をクリック。「スキップ」をクリックしてもOKです。

「使用する準備ができました」が表示されるので「CentOS Linuxを使い始める」をクリック。

「初めて使う方へ」という画面が表示されます。不要であれば画面内右上にある×印をクリック。

これでCentOSのGUI画面が表示されます。

5.参考

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

pkillで文字列マッチしない場合の対処

August 13,2019 11:55 PM
Category:[Linux]
Tag:[Linux]
Permalink

pkillで文字列マッチしない場合の対処方法を紹介します。

1.問題点

下記のようにフルパス指定でtest.shを実行しました。

$ /home/foo/test.sh

psコマンドで見るとフルパスで実行されています。

$ ps -ef | grep test.sh
foo      59476 57186  0 13:43 pts/52   00:00:00 /bin/bash /home/foo/test.sh

pkillコマンドで、このtest.shをフルパスで指定したのですが、プロセスが終了しません。

$ pkill /home/foo/test.sh

ということで、pkillで文字列マッチしない場合の対処方法を紹介します。

2.pkillで文字列マッチしない場合

pkillで指定する文字列パターンは「プロセス名」なので、パスは含みません。

よって、下記の記述であればプロセスは正常に終了します。

$ pkill test.sh

パスを含ませたい場合は、"-f"オプションを追加します。

$ pkill -f /home/foo/test.sh

"-f"は、コマンドライン全体をパターンマッチの対象とするオプションです。

これでパスを含んだプロセスを終了させることができます。

Comments [0] | Trackbacks [0]

pkillを特定のプロセスに絞る方法

August 1,2019 12:03 AM
Category:[Linux]
Tag:[Linux]
Permalink

pkillを特定のプロセスに絞る方法を紹介します。

1.問題点

pkillはプロセス名を指定して強制終了させるためのコマンドです。

たとえば、実行中のtest.shを終了させる場合、

$ pkill test.sh

とすればプロセスを終了できます。

ただ、プロセス名で検索するため、終了させたくない同名の他のプロセスまで終了してしまいます。

これを特定のプロセスに絞りたいのですが、方法が分かりません。

ということで、pkillを特定のプロセスに絞る方法を紹介します。

2.pkillを特定のプロセスに絞る

pkillを特定のプロセスに絞る方法として、"-t"オプションで実行中のターミナル(TTY)を指定します。

$ pkill -t pts/59 test.sh

または

$ pkill --terminal pts/59 test.sh

"-t"または"--terminal"は、ターミナルを指定するオプションです。

これで終了させたいプロセスを、特定のターミナルだけに絞ることができます。

ターミナルを調べるには、プロセス実行前にttyコマンドを実行しておきます。

下記の例では、ターミナルが"/dev/pts/59"であることを示しています。

$ tty
/dev/pts/59

なお、"-t"オプションにターミナルを指定する場合、先頭の"/dev/"は省略します。

また、複数のターミナルを指定する場合はカンマ区切りで指定します。

$ pkill --terminal pts/59,pts/52 test.sh
Comments [0] | Trackbacks [0]

Linuxで文字列の特定部分を抜き出す方法

July 23,2019 12:03 AM
Category:[Linux]
Tag:[Linux]
Permalink

Linuxで文字列の特定部分を抜き出す方法を紹介します。

1.問題点

下記のように、lsコマンドでファイルの一覧を取得します。

# ls -l
合計 3
-rw-r--r--. 1 root root   0  6月 28 10:31 2019 aaa
-rw-r--r--. 1 root root   0  6月 28 10:31 2019 bbb
-rw-r--r--. 1 root root   0  6月 28 10:31 2019 ccc

この出力から「6月」から「10」までの文字列

6月 28 10

を取得したいのですが、方法が分かりません。

ということで、Linuxで文字列の特定部分を抜き出す方法を紹介します。

2.文字列の特定部分を抜き出す

文字列の特定部分を抜き出すには、cutコマンドを利用します。

# ls -l | cut -c 30-37
 
6月 28 10
6月 28 10
6月 28 10

"-c"は、示した位置の文字だけを表示するオプションです。

上記の例では30文字から37文字を表示します。

Comments [0] | Trackbacks [0]

bashの配列をjoinする方法

July 19,2019 12:03 AM
Category:[bash]
Tag:[bash]
Permalink

bashの配列をjoinする方法を紹介します。

1.問題点

bashで次のようなリストを作成しました。

#!/bin/bash
 
declare -a list=("a" "b" "c")

この配列変数listの各データをカンマで結合させて1つのデータにしたいのですが、方法がわかりません。

ということで、bashの配列をjoinする方法を紹介します。

2.bashの配列をjoinする

bashの配列をjoinするには、IFSを利用します。

#!/bin/bash
 
declare -a list=("a" "b" "c")
result="$(IFS=","; echo "${list[*]}")"
echo ${result}

実行結果

a,b,c

IFSは区切り文字の環境変数です。bashの場合、空白文字が区切り文字として初期設定されています。

これを強制的に書き替えたあと、配列を

${配列名[*]}

の形式で出力すると、書き替えたIFSを区切り文字と利用します。

ここではサンプルを簡単にするために区切り文字を書き替えたままにしていますが、処理のあとで空白文字を区切り文字として利用する場合は元に戻しましょう。

#!/bin/bash
 
declare -a list=("a" "b" "c")
backup=$IFS
result="$(IFS=","; echo "${list[*]}")"
IFS=$backup
echo ${result}
Comments [0] | Trackbacks [0]

コマンドの実行結果をdiffする方法

July 8,2019 12:03 AM
Category:[Linux]
Tag:[Linux]
Permalink

コマンドの実行結果をdiffする方法を紹介します。

1.問題点

次のlsコマンドの実行結果を2つ取得し、取得結果の差分をdiffで取得したいのです。

$ ls -1 /home/foo/test1
$ ls -1 /home/foo/test2

次のように実行結果をファイルに出力すれば簡単にdiffできるのですが、できればファイル出力なしで実施したいです。

$ ls -1 /home/foo/test1 > /home/foo/result1
$ ls -1 /home/foo/test2 > /home/foo/result2
$ diff /home/foo/result1 /home/foo/result2

ということで、コマンドの実行結果をdiffする方法を紹介します。

2.コマンドの実行結果をdiffする

コマンドの実行結果をdiffするには、リダイレクションを使って、コマンドの実行結果をdiffの入力にします。

$ diff <(ls -1 /home/foo/test1) <(ls -1 /home/foo/test2)
Comments [0] | Trackbacks [0]

bashのif文で正規表現を使用する方法

July 1,2019 11:55 PM
Category:[bash]
Tag:[bash]
Permalink

bashのif文で正規表現を使用する方法を紹介します。

1.問題点

#!/bin/bash
 
foo=abc123efg

変数fooの中から"123"だけを取り出したいのですが、方法が分かりません。

ということで、bashのif文で正規表現を使用する方法を紹介します。

2.if文で正規表現を使用する

if文で正規表現を使用するには次のようにします。

#!/bin/bash
 
foo=abc123efg
 
if [[ ${foo} =~ ^[a-z]+([0-9]+).*$ ]]; then
  echo ${BASH_REMATCH[1]}
fi

実行結果

123

ポイントは下記のとおりです。

  • if文はブラケット(大カッコ)を二重にする
  • 演算子は"=~"
  • 正規表現はクォーテーションで括らない(正規表現で特別扱いの文字がバックスラッシュでエスケープされるため)
  • 後方参照(カッコで囲った部分)は ${BASH_REMATCH[1]} で取得(複数ある場合、[2][3]…で取得)

Perl系の表記方法("\d"や"\w"など)は使えないみたいなので、POSIX表記を利用します。

\w→[:alnum:]
\d→[:digit:]
\s→[:blank:]

詳細は"info -f 'grep' -n 'Character Classes and Bracket Expressions"で確認できます。

if文の中でPOSIX表記を使う場合、さらに"[]"で括る必要があります。

上記のサンプルを一部POSIX表記に直したものが下記です。

#!/bin/bash
 
foo=abc123efg
 
if [[ ${foo} =~ ^[a-z]+([[:digit:]]+).*$ ]]; then
  echo ${BASH_REMATCH[1]}
fi

実行結果

123

3.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages