sedを使用して特定の文字列の後の特定の文字と異なるn文字を置き換える方法は?

sedを使用して特定の文字列の後の特定の文字と異なるn文字を置き換える方法は?

前の投稿を見ようとしましたが、回答が得られませんでした。よろしくお願いします!同じパターンを持ついくつかのファイルindisei行があり、特定の文字列の後に次の[mau]のいずれかを「A」に置き換えたいと思います。 n=22 string="abnt7777/knowthis" charchange "m"

abnt7777/わかりませんがわからない CAHRACTERSmRESTOFSTRING

私が知っているのは、最初の文字列「abnt7777 / knowthis」だけであり、「abnt7777 / knowthis」とaの間に何文字があるかを知っています。変更後の文字数は22です。

abnt7777/knowthis不明CAHRACTERSARESTOFSTRING

答え1

echo "abnt7777/knowthisDONTKNOWWICHCAHRACTERSmRESTOFSTRING" | sed 's#\(abnt7777/knowthis.\{22\}\)m#\1A#'

印刷

abnt7777/knowthisDONTKNOWWICHCAHRACTERSARESTOFSTRING

このsedコマンドはabnt7777/knowthis後ろに22文字を検索しますm。を除くすべての文字がm合計に含まれ、グループ1としてキャプチャされます\(\)一致する文字列はグループ1(\1)の後に置き換えられますA。行の他のすべての部分は変更されません。

ファイルの内容内で文字列を置き換えるには、次のようなものを使用します。

sed 's#\(abnt7777/knowthis.\{22\}\)m#\1A#' inputfile > outputfile

注:実際の入力モードが異なる場合は、ここにが含まれていることをabnt7777/knowthis確認する必要がありますsed

答え2

変数拡張の場合、正しく理解すると次のようになります。

foo="abnt7777/knowthisDONTKNOWWICHCAHRACTERSmRESTOFSTRING"
echo ${foo:0:39}A${foo:40}

出力:

abnt7777/knowthis 不明な文字残りの文字列
                                      #^ 39 場所(17 abnt7777/knowthis + 22)

関連情報