linuxでの切り取りフィールドと#、$の違い

4024 ワード

1.Linux shell文字変数の上位8ビットを切り取る


実現方法は以下の通りである.
  • expr substr “$a” 1 8
  • echo $a|awk ‘{print substr(,1,8)}’
  • echo $a|cut -c1-8
  • echo $
  • expr $a : ‘\(.\\).*’
  • echo $a|dd bs=1 count=8 2>/dev/null

  •  

    2.指定した文字列で切り取る


    (1)第1の方法:最後のstring後の文字列${varible#*string}を左から右に切り取り、最初のstring後の文字列${varible#*string}を右から左に切り取り、最後のstring後の文字列${varible%%string*}最初のstring後の文字列${varible%string*}を右から左に切り取る.
    $ MYVAR=foodforthought.jpg
    $ echo ${MYVAR##*fo}
    rthought.jpg
    $ echo ${MYVAR#*fo}
    odforthought.jpg
    

    (2)第2の方法:${varible:n 1:n 2}:変数varibleのn 1から始まるn 2文字を切り取り、サブ文字列を構成する.特定の文字のオフセットと長さに基づいて、別の形式の変数拡張を使用して、特定のサブ文字列を選択できます.bashに次の行を入力してみます.
    $ EXCLAIM=cowabunga
    $ echo ${EXCLAIM:0:3}
    cow
    $ echo ${EXCLAIM:3:7}
    abunga
    

    この形式の文字列の切り捨ては、開始文字とサブ文字列の長さをコロンで区切るだけで非常に簡単です.

    3.指定された要求に従って分割する:


    たとえば接尾辞名を取得する
    ls -al | cut -d “.” -f2

    小結:shellは文字列に対応する処理方法が多く、必要に応じて柔軟に選択できます.
     
    shellバッチを作成するとき、文字列関連の操作に関わることがよくあります.awk、sedなど、多くのコマンド文が文字列の様々な操作を行うことができます.実はshellには一連の操作記号が内蔵されており、同様の効果を達成することができ、内部オペレータを使用すると外部プログラムの起動などの時間が省略されるため、速度が非常に速いことが知られています.
    1つの文法.
    1
    2
    3
    4 cut   [ ] -f : -d :
    [[    $name =~  xx ]];then
    xx

    Linuxの#と$の違い


     
    [#]root権限を表す[$]一般ユーザーを表す
    $@:すべてのスクリプトパラメータの内容を示します.
    $#:すべてのスクリプトパラメータを返す個数を示します.
      $# $ 0   $ 1   shell $ 2   shell $@ $* , , 9 $$ ID $? , 0
    例:testとして保存するshellスクリプトを作成する.sh
    #!/bin/sh
    echo "number:$#"
    echo "argume:$@"
    スクリプトの実行:
    ./test.sh first_arg second_arg
     
     
    一、読み出し文字列値の判断
    式の意味
    ${var}
    変数varの値は$varと同じです
     
     
    ${var-DEFAULT}
    varが宣言されていない場合は、$DEFAULTを値*とします.
    ${var:-DEFAULT}
    varが宣言されていない場合、またはその値が空の場合、$DEFAULTをその値*とします.
     
     
    ${var=DEFAULT}
    varが宣言されていない場合は、$DEFAULTを値*とします.
    ${var:=DEFAULT}
    varが宣言されていない場合、またはその値が空の場合、$DEFAULTをその値*とします.
     
     
    ${var+OTHER}
    varが宣言した場合、その値は$OTHERです.そうしないとnull文字列になります.
    ${var:+OTHER}
    varが設定されている場合、その値は$OTHERです.そうしないとnull文字列になります.
     
     
    ${var?ERR_MSG}
    varが宣言されていない場合は$ERR_を印刷します.MSG *
    ${var:?ERR_MSG}
    varが設定されていない場合は$ERR_を印刷します.MSG *
     
     
    ${!varprefix*}
    varprefixで始まる前に宣言されたすべての変数に一致します.
    ${!varprefix@}
    varprefixで始まる前に宣言されたすべての変数に一致します.
    もちろん変数varが設定されている場合、その値は$varです.
     
    二、文字列操作(長さ、読み取り、置換)
    式の意味
    ${#string}
    $stringの長さ
     
     
    ${string:position}
    $stringでは、位置$positionからサブストリングの抽出を開始します.
    ${string:position:length}
    $stringでは、位置$positionから長さ$lengthのサブ列の抽出を開始します.
     
     
    ${string#substring}
    変数$stringの先頭から、最短一致$substringのサブ列を削除します.
    ${string##substring}
    変数$stringの先頭から、最大一致$substringのサブ列を削除します.
    ${string%substring}
    変数$stringの最後から、最短一致$substringのサブ列を削除します.
    ${string%%substring}
    変数$stringの最後から、最大一致$substringのサブ列を削除します.
     
     
    ${string/substring/replacement}
    $replacementを使用して、最初の一致する$substringの代わりに
    ${string//substring/replacement}
    一致するすべての$substringの代わりに$replacementを使用
    ${string/#substring/replacement}
    $stringの接頭辞が$substringに一致する場合、一致する$substringの代わりに$replacementを使用します.
    ${string/%substring/replacement}
    $stringの接尾辞が$substringに一致する場合、一致する$substringの代わりに$replacementを使用します.
     
     
    説明:「*$substring」は正規表現であることができる.