bash / shell で "Remove first and last character of string only if they match"
シェルで文字列の最初と最後の文字を削除する
方法 1: sed
コマンドを使う
sed
コマンドは、ストリームエディタと呼ばれる強力なツールで、テキストの編集や変換によく使われます。
# 文字列を変数に代入
str="abc123cba"
# 最初と最後の文字を削除
new_str=$(echo "$str" | sed 's/^.\(.*\).$/\1/')
# 結果を表示
echo "$new_str" # 出力: bc123c
この例では、sed
コマンドの s
コマンドを使って、文字列を置換しています。
^
は、文字列の先頭を意味します。.
は、任意の文字を表します。*
は、直前の文字が0回以上繰り返されることを意味します。\1
は、最初のキャプチャグループの内容を表します。
つまり、このコマンドは、文字列の先頭と末尾にある文字が一致する場合、それらを削除して、それ以外の文字列を抽出します。
方法 2: parameter expansion
を使う
bash
シェルには、parameter expansion
と呼ばれる機能があり、変数の値を動的に操作することができます。
# 文字列を変数に代入
str="abc123cba"
# 最初の文字を取得
first_char=${str:0:1}
# 最後の文字を取得
last_char=${str:(-1)}
# 最初と最後の文字が一致する場合
if [[ $first_char == $last_char ]]; then
# 最初と最後の文字を削除
new_str=${str:1:(-1)}
fi
# 結果を表示
echo "$new_str" # 出力: bc123c
この例では、parameter expansion
を使って、文字列の先頭と最後の文字を取得しています。
${str:0:1}
は、文字列str
の先頭から1文字を取得します。
その後、if
ステートメントを使って、最初と最後の文字が一致するかどうかを確認しています。一致する場合、parameter expansion
を使って、最初と最後の文字を削除しています。
方法 3: 自作関数を使う
上記の方法を組み合わせて、自作関数を作成することもできます。
#!/bin/bash
# 最初と最後の文字を削除する関数
function remove_first_last_char() {
local str="$1"
# 最初の文字を取得
local first_char=${str:0:1}
# 最後の文字を取得
local last_char=${str:(-1)}
# 最初と最後の文字が一致する場合
if [[ $first_char == $last_char ]]; then
# 最初と最後の文字を削除
echo "${str:1:(-1)}"
else
# 文字列そのまま返す
echo "$str"
fi
}
# テスト
str="abc123cba"
new_str=$(remove_first_last_char "$str")
echo "$new_str" # 出力: bc123c
この例では、remove_first_last_char
という自作関数を作成し、文字列の最初と最後の文字を削除する処理をカプセル化しています。
#!/bin/bash
# 文字列を変数に代入
str="abc123cba"
# 方法 1: sed コマンドを使う
new_str1=$(echo "$str" | sed 's/^.\(.*\).$/\1/')
# 方法 2: parameter expansion を使う
if [[ ${str:0:1} == ${str:(-1)} ]]; then
new_str2=${str:1:(-1)}
fi
# 方法 3: 自作関数を使う
function remove_first_last_char() {
local str="$1"
if [[ ${str:0:1} == ${str:(-1)} ]]; then
echo "${str:1:(-1)}"
else
echo "$str"
fi
}
new_str3=$(remove_first_last_char "$str")
# 結果を表示
echo "方法 1: $new_str1"
echo "方法 2: $new_str2"
echo "方法 3: $new_str3"
実行結果
方法 1: bc123c
方法 2: bc123c
方法 3: bc123c
各方法の詳細
bash
シェルの parameter expansion
機能を使って、変数の値を動的に操作しています。
# 文字列を変数に代入
str="abc123cba"
# 最初と最後の文字を削除
new_str4=$(expr "substr($str, 2, -1)")
# 結果を表示
echo "$new_str4" # 出力: bc123c
この例では、expr
コマンドの substr
関数を使って、文字列の先頭と最後の文字を削除しています。
substr
関数は、3つの引数を受け取ります。- 1つ目は、処理対象の文字列です。
- 2つ目は、抽出する文字列の開始位置です。1から始まるインデックス番号を指定します。
- 3つ目は、抽出する文字列の長さです。負の値を指定すると、末尾から指定した長さに相当する文字列を抽出します。
この例では、substr
関数を使って、文字列 str
の2番目から末尾までの文字列を抽出しています。
awk
コマンドは、テキスト処理用の強力なツールです。
# 文字列を変数に代入
str="abc123cba"
# 最初と最後の文字を削除
new_str5=$(echo "$str" | awk '{print substr($0, 2, length($0)-2)}')
# 結果を表示
echo "$new_str5" # 出力: bc123c
方法 6: Perl を使う
Perl は、テキスト処理に特化したプログラミング言語です。
#!/usr/bin/perl
# 文字列を変数に代入
my $str = "abc123cba";
# 最初と最後の文字を削除
my $new_str6 = substr($str, 1, -1);
# 結果を表示
print "$new_str6\n"; # 出力: bc123c
シェルで文字列の最初と最後の文字を削除するには、いくつかの方法があります。
bash shell