Bashで変数を大文字または小文字に変換する方法

May 13,2019 11:55 PM
Category:[bash]
Tag:[bash]
Permalink

Bashで変数を大文字または小文字に変換する方法を紹介します。

1.問題点

bashで次のサンプルを作りました。

#!/bin/bash
 
foo=ABC

変数fooの値をすべて小文字にしたいのですが、方法がわかりません。

ということで、Bashで変数を大文字または小文字に変換する方法を紹介します。

2.変数を大文字または小文字に変換する

たとえば、大文字の変数をすべて小文字に変換するには次のように、変数の後ろにカンマを2つ記述します。

#!/bin/bash
 
foo=ABC
echo ${foo,,}

実行結果

abc

変換のパターンは次の6種類があります。

パターンフォーマットサンプル結果
1文字目を大文字${foo^}foo=abc; echo ${foo^}Abc
すべてを大文字${foo^^}foo=abc; echo ${foo^^}ABC
1文字目を小文字${foo,}foo=ABC; echo ${foo,}aBC
すべてを小文字${foo,,}foo=ABC; echo ${foo,,}abc
1文字目を反転${foo~}foo=ABC; echo ${foo~}aBC
すべてを反転${foo~~}foo=aBc; echo ${foo~~}AbC

注意点は、変換する記号「^」「,」「~」はカッコで括ることです。

Comments [0] | Trackbacks [0]

bashの変数をsplitして配列を作る方法

May 9,2019 11:55 PM
Category:[bash]
Tag:[bash]
Permalink

bashの変数をsplitして配列を作る方法を紹介します。

1.問題点

bashで次のような変数を作成しました。

#!/bin/bash
 
foo=a,b,c,d,f,e,g

この変数fooを","でsplit(分割)して配列変数に代入したいのですが、方法がわかりません。

ということで、bashの変数をsplitして配列を作る方法を紹介します。

2.bashの変数をsplitして配列を作る

bashの変数をsplitして配列を作るには、文字列置換を利用します。

#!/bin/bash
 
foo=a,b,c,d,f,e,g
list=(${foo//,/ })
echo ${list[@]}
echo ${list[1]}

実行結果

a b c d e f g
b

3.文字列置換について

今回利用したbashの文字列置換のフォーマットは、

${変数名/置換前文字列/置換後文字列}

が基本です。

これで、変数の中にマッチする文字があれば1回のみ置換します。

#!/bin/bash
 
foo=a,b,c,d,f,e,g
list=(${foo/,/ })
echo ${list[@]}
echo ${list[1]}

実行結果

a b,c,d,e,f,g
b,c,d,e,f,g

マッチする文字をすべて置換したい場合は、2項のサンプルのようにスラッシュを2つにして、

${変数名//置換前文字列/置換後文字列}

とします。

"//"はsedの"/g"オプションと同じ意味になります。

Comments [0] | Trackbacks [0]

PythonでEUC-JPのファイルを読み込んで正規表現を使う方法

April 30,2019 11:55 PM
Category:[Python]
Tag:[Python]
Permalink

PythonでEUC-JPのファイルを読み込んで正規表現を使う方法を紹介します。

Pythonは2.x系です。

1.問題点

下記の、文字コードがEUC-JPのファイルがあります。

text.txt

テスト1
テスト2
テスト3

このファイルから「テスト2」の部分だけをマッチさせたいので、下記のスクリプトを作ったのですがマッチしません。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
 
import sys
import codecs
import re
 
path = './test.txt'
f = codecs.open(path, 'r', 'euc_jp')
for line in f:
    result = re.search('テスト2', line)
    if result:
        print line

ということで、PythonでEUC-JPのファイルを読み込んで正規表現を使う方法を紹介します。

2.EUC-JPのファイルを読み込んで正規表現を使う

EUC-JPのファイルを読み込んで正規表現を使うには、search()の第1パラメータにuフラグを与えます。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
 
import sys
import codecs
import re
 
path = './test.txt'
f = codecs.open(path, 'r', 'euc_jp')
for line in f:
    result = re.search(u'テスト2', line)
    if result:
        print line

これでEUC-JPのファイルで正規表現が使えるようになります。

Comments [0] | Trackbacks [0]

Pythonで正規表現を使う方法

April 24,2019 12:03 AM
Category:[Python]
Tag:[Python]
Permalink

Pythonで正規表現を使う方法を紹介します。

1.問題点

下記のスクリプトを書きました。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
 
str = 'abc123def'
print str

このスクリプトを修正して、変数strに含まれる数字"123"だけを出力したいのですが、方法が分かりません。

ということで、Pythonで正規表現を使う方法を紹介します。

正規表現の詳細については、ここでは割愛します。

2.Pythonで正規表現を使う

正規表現を使うには次のようにします。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
 
import re
 
str = 'abc123def'
result = re.search('\d{3}', str)
print result.group()

3.解説

Pythonの正規表現モジュール「re」をインポートします。

import re

パターンに一致するか調べるには、search()を使用します。

result = re.search('\d{3}', str)

フォーマットは次のとおりです。

  • 第1パラメータ:パターン
  • 第2パラメータ:対象の文字列または変数

戻り値のresultには一致結果がはいっています。group()メソッドを使うことでパターンにマッチした内容すべてを返却します。

サンプルでは数字3文字にマッチした"123"が出力されます。

パターンマッチの関数はsearch()の他にmatch()がありますが、これは文字列の先頭がパターンマッチするかを調べるためのものです。

Comments [0] | Trackbacks [0]

ansibleでファイルを書き替える方法

April 18,2019 12:03 AM
Category:[ansible]
Tag:[ansible]
Permalink

ansibleでファイルを書き替える方法を紹介します。

1.はじめに

ansibleでファイルの中身を書き替えたいのですが、方法が分かりません。

ということで、ansibleでファイルを書き替える方法を紹介します。

2.ansibleでファイルを書き替える

ansibleでファイルを書き替えるには、lineinfileモジュールを利用します。

下記にサンプルを示します。すいませんがhostsの部分は適宜直してください。

- hosts: localhost
  become: True
  tasks:
  - name: lineinfile
    lineinfile:
      path: /home/hoge/test.txt
      regexp: '^aaa'
      line: 'bbb'
  • lineinfile:ファイル書き換えのためのモジュール
  • path:書き替え対象のパス・ファイル名(必須)
  • regexp:書き替え前の内容(正規表現)
  • line:書き替え後内容

上記の例は、ファイル/home/hoge/test.txtの行頭が

aaa

という行を

bbb

に書き替えています。

なお、regexpの部分が見つからない場合、lineの内容がファイルの末尾に追加されます。

path、regexp、lineは適宜書き替えてお使いください。

3.ansibleでファイルの特定行を削除する

ansibleでファイルの特定行を削除するには、stateオプションを利用します。

- hosts: localhost
  become: True
  tasks:
  - name: lineinfile
    lineinfile:
      path: /home/hoge/test
      state: absent
      regexp: '^aaa'
  • state:行が存在するか・しないか(削除なので"absent")

これでregexpにマッチする行を削除します。

ちなみに書き替えでstateオプションをつけるのであれば、

      state: present

とします。

ただしデフォルト値がpresentなので、あえて記述する必要はありません。

Comments [0] | Trackbacks [0]

ansibleでvisudoする方法

April 16,2019 12:03 AM
Category:[ansible]
Tag:[ansible]
Permalink

ansibleでvisudoする方法を紹介します。

1.はじめに

サーバ設定作業でansibleを使うことになりました。

「ansibleを使ってこういうときにどうすればいいの?」っていう情報がネットを検索してもなかなかヒットしないので、分かる範囲で小出しにしていきます。

2.ansibleでvisudoする方法

ansibleでvisudoするには、下記のようなplaybookで対応します。hostsの部分は適宜直してください。

- hosts: localhost
  become: True
  tasks:
  - name: test
    lineinfile:
      path: /etc/sudoers
      state: present
      regexp: '^%ADMIN ALL='
      line: '%ADMIN ALL=(ALL) NOPASSWD: ALL'
      validate: '/usr/sbin/visudo -cf %s'
  • lineinfile:ファイル書き換えのためのモジュール
  • path:書き替え対象のパス・ファイル名(必須)
  • state:行が存在するか・しないか(書き替えなので"present")
  • regexp:書き替え前の内容(正規表現)
  • line:書き替え後内容
  • validate:書き替え後の検証。"%s"でpathの内容を指定

上記の例は、

%ADMIN ALL=

という行を

%ADMIN ALL=(ALL) NOPASSWD: ALL

に書き替えて、

# /usr/sbin/visudo -cf /etc/sudoers

で、書き替えたファイルの検証をしています。

regexpとlineを適宜書き替えてお使いください。

Comments [0] | Trackbacks [0]

Pythonで「SyntaxError: Non-ASCII character」というエラーの対処

April 9,2019 11:55 PM
Category:[Python]
Tag:[Python]
Permalink

Pythonで「SyntaxError: Non-ASCII character」というエラーの対処について紹介します。

1.問題点

Pythonで下記のようなスクリプトを書きました。

test.py

#!/usr/bin/env python2
print 'テスト'

このスクリプトを実行したところ、下記の「SyntaxError: Non-ASCII character」というエラーに遭遇しました。

$ ./test.py
  File "./test.py", line 3
SyntaxError: Non-ASCII character '\xe3' in file ./test.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

2.「SyntaxError: Non-ASCII character」というエラーの対処

このエラーを解消するには、ファイルに下記の1行を追加します。

test.py

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
print 'テスト'

実行結果

テスト

この

# -*- coding: utf-8 -*-

という行は、

あるいは下記の記述でもOKです。

#!/usr/bin/env python2
# coding:utf-8
print 'テスト'

または、

#!/usr/bin/env python2
# coding=utf-8
print 'テスト'

3.注意事項

サンプルのようにshebang行がある場合は、その直後(2行目)に記述してください。

下記のように行を空けて記載するとエラーが解消されないようです。

test.py

#!/usr/bin/env python2
 
# -*- coding: utf-8 -*-
print 'テスト'
Comments [0] | Trackbacks [0]

Pythonで文字列を取得する方法

March 29,2019 12:03 AM
Category:[Python]
Tag:[Python]
Permalink

Pythonで文字列を取得する方法を紹介します。

1.問題点

Pythonで次の文字を定義しました。

str = '0100AF85A0202C5D'

この文字列から「85A0」を取得したいのですが方法が分かりません。

ということで、Pythonで文字列を取得する方法を紹介します。

2.文字列を取得する

文字列を取得するにはスライス機能を利用します。

test.py

str = '0100AF85A0202C5D'
print str[6:10]

実行結果

85A0

スライスとは、文字列の特定部分を切り出すことで、フォーマットは次のようになっています。

変数名[i:j:k]

i,j,kの意味は次のとおりです。

  • i:取得文字列の開始位置
  • j:取得文字列の終了位置-1
  • k:スキップする数(今回は説明省略)

今回はiに6、jに10を設定しているので、文字列の6番目から10-1=9番目までを取得します。

他の言語では第2パラメータは文字の位置ではなく取得する文字数を設定する場合もあるので、間違えないように気をつけましょう。

Comments [0] | Trackbacks [0]

Perlのハッシュでキーの有無を調べる方法

March 19,2019 12:03 AM
Category:[Perl]
Tag:[Perl]
Permalink

Perlのハッシュでキーの有無を調べる方法を紹介します。

1.問題点

Perlで下記のようなハッシュを作成しました。

my $hash;
 
$hash->{orange} = 1;
$hash->{grape} = 1;
$hash->{apple} = 1;

このハッシュに"apple"というキーが存在するか調べたいのですが、方法がわかりません。

ということで、ハッシュにキーが存在するか調べる方法を紹介します。

2.ハッシュにキーが存在するか調べる

ハッシュにキーが存在するか調べるには、exists関数を使用します。

#!/usr/bin/perl
 
use strict;
 
my $hash;
$hash->{orange} = 1;
$hash->{grape} = 1;
$hash->{apple} = 1;
 
if ( exists $hash->{apple} ) {
    print "exist";
} else {
    print "no exist";
}

"apple"はキーに存在するので、実行結果は、

exist

となります。

if文に記述したハッシュキーを、存在しない任意の文字列に変更してみます。

#!/usr/bin/perl
 
use strict;
 
my $hash;
$hash->{orange} = 1;
$hash->{grape} = 1;
$hash->{apple} = 1;
 
if ( exists $hash->{abc} ) {
    print "exist";
} else {
    print "no exist";
}

"abc"はキーに存在しないので、実行結果は、

no exist

となります。

Comments [0] | Trackbacks [0]

Pythonのシングルクォーテーションとダブルクォーテーションの違い

March 13,2019 12:03 AM
Category:[Python]
Tag:[Python]
Permalink

Pythonのシングルクォーテーションとダブルクォーテーションの違いについて調べてみました。

1.はじめに

2.シングルクォーテーションとダブルクォーテーションの違い

シングルクォーテーションとダブルクォーテーションの違いは特にありません。

PHPなどでは変数を展開する場合にダブルクォーテーションで括る必要がありますが、Pythonはそのような仕様はないようです。

PHPの場合

$str = 'World';
echo "Hello $str";

またPythonでは下記の考慮が必要です。

シングルクォーテーション:文字列にシングルクォーテーションが含まれる場合、エスケープが必要

str = '\'Hello World\''

ダブルクォーテーション:文字列にダブルクォーテーションが含まれる場合、エスケープが必要

str = "\"Hello World\""

言い換えると、逆のパターンであればエスケープは不要です。

str = "'Hello World'"

または

str = '"Hello World"'
Comments [0] | Trackbacks [0]

Pythonで改行せずに出力する方法

March 12,2019 12:03 AM
Category:[Python]
Tag:[Python]
Permalink

Pythonで改行せずに出力する方法を紹介します。

1.問題点

Pythonで下記のスクリプトを書きました。

test.py

print "Hello World!"
print "Hello World!"

このスクリプトを実行させたところ

$ python test.py
Hello World
Hello World

という風に改行が含まれてしまいます。

改行せずに出力する方法が分かりません。

ということで、Pythonで改行せずに出力する方法を紹介します。

改行せずに出力する方法は2つあります。

2.改行せずに出力する(その1)

改行せずに出力する1つめの方法は、1行目のprint文の末尾にカンマを付与することです。

test.py

print "Hello World!",
print "Hello World!"

これを

$ python test.py

と実行すれば、

Hello World Hello World

が出力されます。

3.改行せずに出力する(その2)

改行せずに出力する1つめの方法は、sys.stdout.writeを用いることです。

2項の方法では文字列の間に空白が含まれてしまいます。

この空白も除去したい場合、sys.stdout.writeを用います。

test.py

import sys
 
sys.stdout.write('Hello World')
sys.stdout.write('Hello World')

これを

$ python test.py

と実行すれば、

Hello WorldHello World

が出力されます。

なお、最後の行に改行を含めたい場合、

test.py

import sys
 
sys.stdout.write('Hello World')
sys.stdout.write('Hello World\n')

とすればよいでしょう。

Comments [0] | Trackbacks [0]

WindowsでShiftキー/Ctrlキー/Altキー/Windowsキーを押しっぱなしにする方法

March 7,2019 12:03 AM
Category:[Windows]
Tag:[Windows]
Permalink

WindowsでShiftキー/Ctrlキー/Altキー/Windowsキーを押しっぱなしにする方法を紹介します。

1.問題点

Windowsの操作で英大文字だけを打ち込む作業が発生しました。

その際Shiftキーを押しっぱなしにしなければなりませんが、小指でShiftキーを押し続けるのは大変です。

小さいおもりをキーの上に置く方法もあると思いますが、他に良い方法はないでしょうか。

ということで、WindowsでShiftキー/Ctrlキー/Altキー/Windowsキーを押しっぱなしにする方法を紹介します。

2.Shiftキー/Ctrlキー/Altキー/Windowsキーを押しっぱなしにする

Shiftキー/Ctrlキー/Altキー/Windowsキーを押しっぱなしにするには、「固定キー」機能を利用します。

以下、固定キー機能の設定方法です。

Windowsキー+Uを押下(または「スタート」→「アクセサリ」→「コンピューターの簡単操作」→「コンピューターの簡単操作センター」をクリック)。

コンピューターの簡単操作センター

「コンピューターの簡単操作センター」が開くので「キーボードを使いやすくします」をクリック。

(クリックで拡大、以下同様)
キーボードを使いやすくします

「入力しやすくします」の中の「固定キーを有効にする」にチェック。

固定キーを有効にする

「固定キーのセットアップ」をクリック。

固定キーのセットアップ

上にある「固定キーを有効にします」をチェック。

固定キーを有効にします

「Ctrl、Alt、Shift、Windowsロゴキーを2回続けて押すとそのキーをロックする」をチェック。

Ctrl、Alt、Shift、Windowsロゴキーを2回続けて押すとそのキーをロックする

「2つのキーを同時に押すと固定キー機能を無効にする」のチェックを外す。これはCtrlキーを使ってエディタ操作をする場合に固定キー機能が解除されるのを防ぐためです。

2つのキーを同時に押すと固定キー機能を無効にする

「OK」をクリック。

「OK」をクリック

ひとつ前の画面に戻るので「OK」をクリック。

「OK」をクリック

これで設定完了です。

タスクバーに白い4つの箱のアイコンが表示されます。

タスクバーに白い4つの箱のアイコンが表示

それぞれの箱は、

上:Shiftキー
下左:Ctrlキー
下中:Windowsキー
下右:Altキー

に対応しています。

このアイコンの使い方は次項で説明します。

3.キーをロックする

Shiftキー/Ctrlキー/Altキー/Windowsキーをロックするには、ロックしたいキーを連続で2回押下します。

キーがロックされると黒に表示が変わります。

Shiftキーがロックされた状態
Shiftキーがロックされた状態

Ctrlキーがロックされた状態
Ctrlキーがロックされた状態

Windowsキーがロックされた状態
Windowsキーがロックされた状態

Altキーがロックされた状態
Altキーがロックされた状態

なお、ロックしたいキーを1回だけ押下すると1度だけロックされた状態になり、何かキーを押下した時点でロックが解除されます。

4.ロックを解除する

ロックを解除するには、ロックされているキーを1回押下します。

なお、ロックしたいキーを1回だけ押下してロックした場合(かつ他のキーを押下していない場合)、そのキーを2回押下すれば解除されます。

5.固定キー機能を解除する

固定キー機能を解除するには、4つの箱のアイコンをダブルクリックすれば設定画面が表示されるので、「固定キーを有効にします」のチェックを外して「OK」をクリックします。

Comments [0] | Trackbacks [0]

Pythonでshebang行を書く方法

March 5,2019 12:03 AM
Category:[Python]
Tag:[Python]
Permalink

Pythonでshebang行を書く方法を紹介します。

1.問題点

shebang(シェバンまたはシバンと読む)行は、そのスクリプトが使用するインタプリタを指定するためのものです。

例えば、Linuxのシェルスクリプトの先頭に次のように書きます。

test.sh

#!/bin/bash
 
echo "Hello World!"

これでファイルのパーミッションに実行権をつけて

$ ./test.sh

とすればシェルスクリプトとして実行されます。

が、Pythonでshebang行の書き方が分かりません。

ということで、Pythonでshebang行を書く方法を紹介します。

2.sheang行を書く

Pythonのshebang行は次のように記述します。

使用するバージョンによって異なるようです。

バージョン2の場合

test.py

#!/usr/bin/env python2
 
print "Hello World!"

バージョン3の場合

test.py

#!/usr/bin/env python3
 
print "Hello World!"

これでファイルのパーミッションに実行権をつけて

$ ./test.py

とすればPythonスクリプトとして実行されます。

Comments [0] | Trackbacks [0]

Pythonで改行を含む複数行データを代入する方法(ヒアドキュメント)

February 28,2019 11:55 PM
Category:[Python]
Tag:[Python]
Permalink

Pythonで改行を含む複数行データを代入する方法(ヒアドキュメント)を紹介します。

1.問題点

Pythonで、

aaa
bbb
ccc

という、改行を含む複数行のデータを変数に代入したいのですが、方法が分かりません。

ということで、Pythonで改行を含む複数行データを代入する方法を紹介します。

2.改行を含む複数行データを代入する

改行を含む複数行データを代入するには、クォーテーション(またはダブルクォーテーション)を3つ連結させたもので括ります。

いわゆる「ヒアドキュメント」です。

str = '''aaa
bbb
ccc'''

または

str = """aaa
bbb
ccc"""

サンプル

test.py

str = '''aaa
bbb
ccc'''
 
print str

実行結果

aaa
bbb
ccc

クォーテーション(またはダブルクォーテーション)開始の直後や終了の直前に改行をいれると、改行も文字列として含まれるので注意しましょう。

Comments [0] | Trackbacks [0]

Pythonで"Hello World"を出力する方法

February 27,2019 12:03 AM
Category:[Python]
Tag:[Python]
Permalink

Pythonで"Hello World"を出力する方法を紹介します。

1.はじめに

Pythonでプログラミングしてみました。

ということで、手始めに"Hello World"を出力する方法を紹介します。

2."Hello World"を出力する

"Hello World"を出力するにはprint文を用います。

test.pyというファイルを作成し、下記の1行を記述します。

test.py

print "Hello World!"

文末のセミコロンは不要です(セミコロンがあっても問題ありません)。

これで、

$ python test.py

と実行すれば、

Hello World!

が出力されます。

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