Bash は文字列から最初と最後の文字を削除する

そんな文字列があります。

|abcdefg|

そして、元の文字列から最初と最後の2つの | 文字を除いた、何らかの方法(string2など)で呼ばれる新しい文字列を取得したいので、次のようになります。

abcdefg

これはbashで可能でしょうか?

ソリューション

することができます。

string="|abcdefg|"
string2=${string#"|"}
string2=${string2%"|"}
echo $string2

また、文字列の長さが一定の場合は、次のようにします。

string="|abcdefg|"
string2=${string:1:7}
echo $string2

また、次のようにもできます。

echo "|abcdefg|" | cut -d "|" -f 2

また、これは

echo "|abcdefg|" | sed 's/^|\(.*\)|$/\1/'
解説 (5)

ここでは、文字列の長さに依存しない解決策を紹介します(bash)。

string="|abcdefg|"
echo "${string:1:${#string}-2}"
解説 (0)

また、sedを使用して、シンボル自体を参照するだけでなく、位置参照を使用して、次のように|を削除することができます。

$ echo "|abcdefg|" | sed 's:^.\(.*\).$:\1:'
abcdefg

ここで ':'は区切り文字です(/またはクエリにない任意の文字に置き換えることができます、sに続く任意の記号がそれを行います)ここで^(キャレット)は入力文字列の先頭を意味し、$(ドル)は末尾を意味します。カレットの後にある.(点)とドル記号の前にある.(点)は1文字を表します。つまり、最初と最後の文字を削除するということです。 文字列中に存在しない文字でも削除されることに注意してください。

EX:

$ echo "abcdefg" | sed 's:^.\(.*\).$:\1:'
bcdef
解説 (0)