0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[シェル] パターン置換 "${parameter/pattern}" を用いたパターン削除

Last updated at Posted at 2024-07-05

パラメータ展開 "${parameter/pattern/string}" を用いてパターン置換を行えますが、string または /string をなくすとパターン削除を行えます。

パターンに関しては別記事にしました。

参考「シェルのパターンマッチング - Qiita

※パラメータ展開の詳細は man bash 等を参照。
※パターンマッチングの詳細は man bash 等を参照。

参考「3.5.3 Shell Parameter Expansion - Bash Reference Manual
参考「3.5.8.1 Pattern Matching - Bash Reference Manual

1. 最長一致

パターン置換を用いたパターン削除 意味
"${parameter/#pattern}" 前方一致
"${parameter##pattern}"
"${parameter/%pattern}" 後方一致
"${parameter%%pattern}"
"${parameter/pattern}"
"${parameter//pattern}"
部分一致

※パラメータ展開 "${parameter/#pattern}" および "${parameter/%pattern}" はシェルオプション nocasematch の影響を受けますが、パラメータ展開 "${parameter##pattern}" および "${parameter%%pattern}" は影響を受けません。

パラメータ展開 "${parameter/pattern/string}" は最長一致でパターン置換を行うため、パターン置換を用いてパターン削除を行う場合も同様です。

# 
function f() {

	local -r parameter='foo bar baz'

	echo "${parameter##* }"
	echo "${parameter/#* }"

	echo "${parameter%% *}"
	echo "${parameter/% *}"

	echo "${parameter/ }"

	echo "${parameter// }"

}

f
例の実行結果
baz
baz
foo
foo
foobar baz
foobarbaz

2. 最短一致

パラメータ展開 "${parameter/pattern/string}" は最短一致でパターン置換を行えないため、拡張パターンを用いる等して最長一致に書き換えるか、またはパターンマッチングでなく正規表現等で置換します。

※シェルオプション nocasematch の影響の有無に注意。

shopt -s extglob

# 
function f() {

	local -r parameter='foo bar baz'

	echo "${parameter#* }"
	echo "${parameter/#*([^ ]) }"
	[[ "$parameter" =~ ' '(.*)$ ]] && echo "${BASH_REMATCH[1]}" || echo "$parameter"

	echo "${parameter% *}"
	echo "${parameter/% *([^ ])}"
	[[ "$parameter" =~ ^(.*)' ' ]] && echo "${BASH_REMATCH[1]}" || echo "$parameter"

}

f
例の実行結果
bar baz
bar baz
bar baz
foo bar
foo bar
foo bar
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?