Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxのシェル文字列操作(length、find、replace)の詳細

Linuxのシェル文字列操作(length、find、replace)の詳細

  

シェルバッチプログラムを実行するときは、多くの場合文字列関連の操作が必要です。 awk、sedはさまざまな文字列操作を実行できます。実際、シェルには一連の操作記号が組み込まれており、これによって同様の効果が得られます。ご存知のとおり、内部演算子を使用すると外部プログラムを起動する時間が省かれるため、速度は非常に速くなります。


まず、読み込んだ文字列の値を判断します。




意味

$ {var}変数varの値。$ var $ {var-DEFAULT}と同じです。varが宣言されていない場合、$ DEFAULTがその値として使用されます* $ {var:-DEFAULT} varが宣言されていない場合、あるいは、値がNULLの場合は、$ DEFAULTがその値として使用されます* $ {var = DEFAULT} varが宣言されていない場合は、$ DEFAULTがその値として使用されます* $ {var:= DEFAULT} varが宣言されない場合、またはその値がnullで、$ DEFAULTがその値です。* $ {var + OTHER} varが宣言されている場合、その値は$ OTHERです。それ以外の場合は、nullです。varが設定されている場合は、$ {var:+ OTHER}です。それ以外の場合はNULL値になります。$ {var?ERR_MSG} varが宣言されていない場合は、$ ERR_MSGを表示します。$ $ {var:?ERR_MSG} varが設定されていない場合は、$ ERR_MSGを出力します。 * $ {!varprefix *}は、以前に宣言されたvarprefixで始まるすべての変数と一致します$ {!varprefix @}は、以前に宣言されたすべてのvarprefixで始まる変数と一致します

追加された' *'もちろん、変更した場合varが既に設定されている場合、その値は$ varになります。

[chengmo @ localhost〜] $ echo $ {abc-'ok '} ok [chengmo @ localhost〜] $ echo $ abc

[chengmo @ localhost〜] $ echo $ {abc = 'ok'} ok [chengmo @ localhost〜] $ echo $ abcok


abcが' ="を宣言していない場合また、abcに値を割り当てます。

[chengmo @ localhost〜] $ var1 = 11; var2 = 12; var3 = [chengmo @ localhost〜] $ echo $ {!v @} var1 var2 var3 [chengmo @ localhost〜] $ echo $ { !v *} var1 var2 var3


$ {!varprefix *} $ {!varprefix @}と同様に、変数名の接頭辞文字で既に定義されている変数を検索できます。 NULL値


2番目に、文字列操作(長さ、読み取り、置換)



expression

意味

$ {#string} $ string length $ {string:position} $ stringでは、$ stringのposition $ positionから部分文字列$ {string:position:length}を抽出します。位置$ positionは、長さ$ lengthの部分文字列$ {string#substring}の抽出を開始し、変数$ stringの先頭から、一致する最短$ substring $ {string ## substring}を持つ部分文字列を削除します。 $ substringに一致するサブストリング$ {string%substring}変数$ stringの末尾から、最も短い一致を持つサブストリングを削除します$ substring $ {string %% substring}変数$ stringの末尾から、最も長い一致する$ substringに一致するサブストリングを削除します$ {string /substring /replacement}は、最初に一致した$ substringの代わりに$ replacementを使用します$ {string //substring /replacement}は、一致したすべての$ substring $ {string /#substring /replacement}の代わりに$ replacementを使用します。 $ stringプレフィックスは$ substringに一致します。$ $の場合、一致した$ substring $ {string /%substring /replacement}の代わりに$ replacementが使用されます。文字列の接尾辞が$ substringと一致し、一致した$ substringの代わりに$ replacementが使用されます。

説明:" * $ substring'は正規表現にすることができます。


1。長さ

[web97 @ salewell97〜] $ test = '私は中国が大好きです' [web97 @ salewell97〜] $ echo $ {#テスト} 12

$ {#変数名文字列の長さを取得する


2.文字列を傍受する

[chengmo @ localhost〜] $ test = '私は中国が大好きです' [chengmo @ localhost〜] $ echo $ {test:5} e china [chengmo @ localhost〜] $ echo $ {test:5:10} e china

$ {変数名:start:length}部分文字列を取得


3.Stringの削除

[chengmo @ localhost〜] $ test = 'c:/windows/boot.ini' [chengmo @ localhost〜] $ echo $ {test# /}c:/windows/boot.ini[chengmo@localhost〜] $ echo $ {test#* /} windows /boot.ini [chengmo @ localhost〜] $ echo $ {test ## * /} boot.ini < Br>

[chengmo @ localhost〜] $ echo $ {test%/*} c:/windows [chengmo @ localhost〜] $ echo $ {test %% /*}

$ {変数名マッチの表現を削除するために文字列の先頭から部分文字列を装備しています。

$ {変数名%substring正規表現}は、一致する表現を削除するために、文字列の末尾から部分文字列を指定しています。

注意:$ {test ## * /}、$ {test%/*}はファイル名またはディレクトリアドレスを取得する最も簡単な方法です。

4.Stringの置き換え

[chengmo @ localhost〜] $ test = 'c:/windows/boot.ini' [chengmo @ localhost〜] $ echo $ {test /\\ //\\\\}c:\\windows/boot.ini[chengmo@localhost〜] $ echo $ {test //\\ //\\\\} c:\\ windows \\ boot.ini


$ {変数/検索/値の置換} 1つの' /'は最初のものを置換することを意味し、' //'は検索が表示されたときにすべて置換することを意味します。' /'エスケープ文字'を追加してください。 \\ /'はを示します。

3つ、パフォーマンス比較

シェルでは、awk、sed、exprなどを介して、上記の操作を実行できます。以下で性能比較を行います。

[chengmo @ localhost〜] $ test = 'c:/windows/boot.ini' [chengmo @ localhost〜] $ iの$時間(seq 10000); a = $ {#test}; done;

本物の0m0.173suser 0m0.139ssys 0m0.004s

[chengmo @ localhost〜] $(i = 10000)でのiの$時間; a = $(exprの長さ$)テスト);完了;

実際0m9.734suser 0m1.628s


速度の違いは何百回もあり、外部コマンドの処理を呼び出します。内蔵の演算子のパフォーマンスは大きく異なります。シェルプログラミングでは、組み込みの演算子や関数を使ってやってみましょう。 awkを使うと、sedはこれに似ています。

Copyright © Windowsの知識 All Rights Reserved