2016-10-18 6 views
1

これはどうして複雑なのか、何か不足しています。私は単に既存の文字列内の部分文字列の整数値を取得し、それを変数に置きたいだけです。これはPHP strposと同じです。Linux文字列関数

私が見つけた最も近いです:

echo $haystack | awk '{print index($0,"<tagtosearch>")}'; 

は、

myvar=$($haystack | awk '{print index($0,"<tagtosearch>")}'); 

を試みたが、コマンドは、アプリケーションが特定のLinuxボックス上のカスタムのbashスクリプトを含める自動化することです

を発見していないと言います既存のものを上書きすることはできません。そこでカスタムセクションを示すカスタム開始タグと終了タグを挿入することにしました。だから、私は単純に開始位置と終了位置を取得し、ファイルのこの部分を削除し、最新バージョンを取得することを期待していました。 これは私の知る限り、その機能を持っているようです。

function install-env(){ 
    mkdir -p /etc/datadimension/tmp; 
    cd /etc/datadimension/tmp; 
    cp /etc/bash.bashrc tempbash.bashrc; 
    newbash=$(cat tempbash.bashrc); 
    echo "$newbash" > newbash.bashrc; 
    insertstart=$(echo "$newbash" | awk '{print index($0,"<starttag>")}'); 
    echo $insertstart; 
} 

出力

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

私はがちに文字列を扱うことができる何かをインストールする必要がありますか - これが欠けている、本当に基本的な要件です。

+0

単にゼロ/スペースの読み込みを出力する – Datadimension

+2

'$ haystack'の内容を見ずに予想される出力を見ないとどうやって推測できますか? – anubhava

+0

editted - 期待される出力は、完全なbashファイル内のの位置の整数になります。 – Datadimension

答えて

1

は、この1つはいくつかのテストPHPのstrpos()関数

strpos() { 
    local string=$1 
    local findme=$2 

    awk -v x=$string -v y=$findme '{print index($0, y)}' <<< $string 
} 

のように動作しているようです

1

$($haystack)では、$haystackに割り当てられた値をコマンドとして呼び出します。

パイプに$haystackawkにこれを試してみてください。

myvar=$(echo "$haystack" | awk '{print index($0,"<tagtosearch>")}'); 

をそれとも@anubhavaは使用して、コメントで示唆するようhere string

myvar=$(awk '{print index($0, "<tagtosearch>")}' <<< "$haystack") 
+0

単にゼロ/スペースのロードを出力する – Datadimension

0

あなたが検索ワードの位置を印刷したい場合ファイルであれば、このawkコマンドを使用できます:

awk -v kw='<starttag>' 'p=index($0, kw){p+=b; exit} {b+=length($0)+1} END{print p}' file 

index0より大きくなるまで、実行中の変数bに各行の長さを追加し続けます。その時現在のラインのインデックスをbに追加して終了します。

0

取り扱いPHPとは別に許容できる何かを見つけることができませんでした

strpos azerty a 
1 
strpos azerty t 
5 
strpos azerty er 
3 
strpos azerty/uio/
7 
strpos "azerty uio" " " 
7 

EDIT: の場合あなたはあなたができるPHPの振る舞いを正確にしたい:

php_strpos() { 

    local haystack="$1" 
    local needle="$2" 
    local offset=${3:-0} 

    php -r "echo strpos('$haystack', '$needle', $offset);" 
}