web-dev-qa-db-ja.com

文字列の一部を返すLinux Shellコマンドは何ですか?

文字列の一部を返すことができるlinuxコマンドを見つけたいです。ほとんどのプログラミング言語では、substr()関数です。 bashには、この目的に使用できるコマンドがありますか。このようなことをしたい... substr "abcdefg" 2 3-cdeを出力します。


後続の同様の質問:

88
Binny V A

そのようなことをするシェルユーティリティを探している場合は、cutコマンドを使用できます。

例を挙げるには、次を試してください。

echo "abcdefg" | cut -c3-5

をもたらす

cde

-cN-Mは、列NMを返すようにcutコマンドに指示します。

161
Toybuilder

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の使用を検討してください。

94
dmckee

「純粋な」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と入力するだけで簡単に見つかるので、この投稿をさらに拡張する価値はないと思います。

33
ata

Bashではこれを試すことができます:

stringZ=abcABC123ABCabc
#       0123456789.....
#       0-based indexing.

echo ${stringZ:0:2} # prints ab

The Linux Documentation Project のその他のサンプル

18
Juanma

expr(1)にはsubstrサブコマンドがあります:

expr substr <string> <start-index> <length>

これは、bash(おそらく組み込みLinux)がなく、cut(1)を使用するのに必要な余分な「エコー」プロセスが必要ない場合に便利です。

13
camh
${string:position:length}
6
Bill the Lizard