
親愛なるStack Exchangeコミュニティの皆さん、
私は別の解決策を見ましたが、正規表現を使用するのが難しいので、これを私の状況に合わせて調整する必要があります。
置き換える必要があるlibオブジェクトのメンバー属性と名前を含むソフトウェア生成ファイルがあります。属性の名前を見つけてデフォルトのファイル名に置き換えるには、sedを使用する必要があります。
以下を含むbobby.jsという名前の.jsファイルで始まります。
// stage content:
(lib.Scenario2IntroFigure0 = function(mode,startPosition,loop) {
stuff
}
同じbobby.jsファイルで終わりますが、今は次のようになります。
// stage content:
(lib.bobby = function(mode,startPosition,loop) {
stuff
}
注:シーン2の紹介図0はいその他残念ながら、すべてのファイルについて。
私がしなければならないことを説明する類似コード:
A. 次のパターン間の項目を見つけて、前の名前を区切ります。
// stage content:
(lib.
B. このエンディングパターンは次のとおりです。
= function(mode,startPosition,loop) {
C. 次のコマンドを使用して、ファイルのデフォルト名自体を取得します。
FILENAME=$(basename $1 '.js')
D. 古い名前をファイルのデフォルト名に変更し、次のようにファイルを上書きします。
sed -i "s/Scenario2IntroFigure0/$DA_FILE/g" $1
ただし、「Scenario2IntroFigure0」は、sedがこれら2つのモードの間で見つけたものです。
答え1
$file
次に置き換えてください$1
:
file="bobby.js"
filename=$(basename "$file" '.js')
sed -i 's/\((lib\.\).*\( = function(mode,startPosition,loop) {\)/\1'"$filename"'\2/' "$file"
答え2
GNU awkを使用してgensub()を実行します。
$ awk -v RS= '{ $0=gensub(/(.*\/\/\s+stage content:\s+\(lib\.)\S+(\s+=\s+function\(mode,startPosition,loop\)\s+\{.*)/,"\\1" gensub(/\.js$/,"",1,FILENAME) "\\2",1) } 1' bobby.js
// stage content:
(lib.bobby = function(mode,startPosition,loop) {
stuff
}
awk -i inplace -v RS=...
「所定の位置」を編集するには:
答え3
@Freddyで始まりますが、コンテストに合格するようOPの要求が含まれています。に交換して使用を\n
完了してください。NULL
sed
tr '\n' '\0'
その後、後でもう一度切り替えますsed
。
f="bobby.js"
b=$(basename "$f" '.js')
pre="// stage content:\x00\(lib." #pattern includes NULL (\x00)
post=" = function\(mode,startPosition,loop\)"
cat $f | tr '\n' '\0' | sed -E "s|($pre)[[:alnum:]]+($post)|\1$b\2|g" | tr '\0' '\n'
編集する
sed
混乱のない純粋なソリューションtr
f="bobby.js"
b=$(basename "$f" '.js')
pre="\/\/ stage content:"
mid="\(lib."
post=" = function\(mode,startPosition,loop\)"
sed -E "/^$pre$/{$!{ N;s|($pre\n$mid)[[:alnum:]]+($post)|\1$b\2|;ty;P;D;:y}}" $f
このソリューションの利点は次のとおりです。この投稿そしてこれ。私のようにたくさん読んでから、あなたの頭が痛くなければいいのですが、その過程で私は多くを学びました。 @Peter.Oを含むポスターを尊重してください。
私たちはそうしません!
PostScript
bobby.js
開いた中かっこと閉じ中括弧が一致しないため、元の形式が正しくありません。