106

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


その後の同様の質問:

4

6 に答える 6

192

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

あなたの例を取るには、試してください:

echo "abcdefg" | cut -c3-5

利回り

cde

whereは、列を-cN-Mに戻すようにカット コマンドに指示します。NM

于 2008-10-20T18:39:35.893 に答える
104

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ください。

于 2008-10-20T18:35:53.063 に答える
35

「純粋な」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ことで簡単に見つけられるので、この投稿をさらに拡張する価値があるとは思いません.

于 2011-11-12T21:16:11.920 に答える
23

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

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

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

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

于 2008-10-20T18:36:58.880 に答える
16
${string:position:length}
于 2008-10-20T18:37:54.370 に答える
14

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

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

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

于 2008-10-21T01:05:27.940 に答える