指定された位置のテキスト変数に文字列を挿入する方法

指定された位置のテキスト変数に文字列を挿入する方法

私は文字列操作のチュートリアルをたくさん見つけましたが、特定の状況に適用する方法がわかりません。文字列変数を挿入(交換ではない)する必要があります。言葉テキスト変数としてテキスト2つの方法のいずれかを使用してください(行番号付けには依存せず、ファイルの読み取り/書き込みよりも変数操作が好ましい)。

  1. 一致する文字列の前または
  2. 特定のインデックス(バイト位置)で

    text="mytextMATCHmytext"
    word="WORD"
    match="MATCH"
    
    # method1 - not working, because text is not a file
    sed '/$word/ i $match' text
    
    # method2
    indx="${text%%$match*}"
    indx=${indx%:*} # leave only the byte index where match starts
    text="$text{0-$index-1}$word$text{$index-end}"
    
    # expected value of text:
    "mytextWORDMATCHmytext"
    

構文を理解するのに役立ちます。両方の方法を修正できれば良いと思います。別の方法がありますか?これテキスト1MB以上のテキストが含まれているので、効率的な方法が好まれます。

ベストアンサー1

j変数にテキストを挿入するtext場所p(0から計算):

p=5
text="$(seq 10)"               ## arbitrary text
text="${text:0:p}j${text:p}"

j一致する部分の前にテキストを挿入するには、次の手順を実行します$match

text="${text%%${match}*}j${match}${text##*${match}}"

$textこれは、前の部分が見つかるまで引き抜き、$match追加j、追加、および後続の部分が見つかるまで追加します$match。ゲームが1つだけあってほしい!$text$match$match$text

おすすめ記事