文字列の一部を返すことができる Linux コマンドを見つけたいです。ほとんどのプログラミング言語では、それはsubstr()
関数です。bash には、この目的で使用できるコマンドはありますか。私はこのようなことができるようになりたい...
substr "abcdefg" 2 3
- プリントcde
。
その後の同様の質問:
文字列の一部を返すことができる Linux コマンドを見つけたいです。ほとんどのプログラミング言語では、それはsubstr()
関数です。bash には、この目的で使用できるコマンドはありますか。私はこのようなことができるようになりたい...
substr "abcdefg" 2 3
- プリントcde
。
その後の同様の質問:
そのようなことを行うためのシェル ユーティリティを探している場合は、cut
コマンドを使用できます。
あなたの例を取るには、試してください:
echo "abcdefg" | cut -c3-5
利回り
cde
whereは、列を-cN-M
に戻すようにカット コマンドに指示します。N
M
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}
インデックス付き部分文字列の展開 (負のオフセットを使用した特別な動作、および新しい Bash では負の長さ):
${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
${string:position:length}
expr(1)
substr サブコマンドがあります。
expr substr <string> <start-index> <length>
これは、bash (おそらく組み込み Linux) がなく、cut(1) を使用するために必要な余分な「エコー」プロセスが必要ない場合に便利です。