文字列の一部を返すことができるlinuxコマンドを見つけたいです。ほとんどのプログラミング言語では、substr()
関数です。 bashには、この目的に使用できるコマンドがありますか。このようなことをしたい... substr "abcdefg" 2 3
-cde
を出力します。
後続の同様の質問:
そのようなことをするシェルユーティリティを探している場合は、cut
コマンドを使用できます。
例を挙げるには、次を試してください。
echo "abcdefg" | cut -c3-5
をもたらす
cde
-cN-M
は、列N
〜M
を返すようにcutコマンドに指示します。
Bashのマンページから:
${parameter:offset}
${parameter:offset:length}
Substring Expansion. Expands to up to length characters of
parameter starting at the character specified by offset.
[...]
または、bash
があるかどうかわからない場合は、cut
の使用を検討してください。
「純粋な」bashには、(サブ)文字列操作のための多くのツールがありますが、主に パラメータ展開 に限定されません:
${parameter//substring/replacement}
${parameter##remove_matching_prefix}
${parameter%%remove_matching_suffix}
インデックス付きサブストリングの展開(負のオフセット、および新しいBashesでは負の長さを持つ特別な動作):
${parameter:offset}
${parameter:offset:length}
${parameter:offset:length}
そしてもちろん、パラメーターがnullかどうかに作用する非常に便利な展開:
${parameter:+use this if param is NOT null}
${parameter:-use this if param is null}
${parameter:=use this and assign to param if param is null}
${parameter:?show this error if param is null}
リストされているものよりも調整可能な動作が多く、前述したように、文字列を操作する他の方法があります(一般的な方法は$(command substitution)
とsedまたは他の外部フィルターとの組み合わせです)。しかし、man bash
と入力するだけで簡単に見つかるので、この投稿をさらに拡張する価値はないと思います。
Bashではこれを試すことができます:
stringZ=abcABC123ABCabc
# 0123456789.....
# 0-based indexing.
echo ${stringZ:0:2} # prints ab
The Linux Documentation Project のその他のサンプル
expr(1)
にはsubstrサブコマンドがあります:
expr substr <string> <start-index> <length>
これは、bash(おそらく組み込みLinux)がなく、cut(1)を使用するのに必要な余分な「エコー」プロセスが必要ない場合に便利です。
${string:position:length}