UNIXでHTMLバイナリファイルの値を取得および置換する

UNIXでHTMLバイナリファイルの値を取得および置換する

私が作成したHTMLテンプレートから特定の値を検索して置き換えようとしています。バイナリファイルとして、私はこれまでHTMLを検索して置き換えることに成功していませんでした。

ここでは、文字列1111を検索して1234に置き換える必要があります。

style='mso-bookmark:_MailOriginal'><span style='color:#1F497D'>1111</span><o:p></o:p></span></p>

HTMLソースコードに16進数が多すぎるため、どのコマンドを使用できるかをお勧めします。

置き換えたいHTMLは次のとおりです。https://pastebin.mozilla.org/8920460

答え1

Pythonで書かれた単純なスクリプトを使って実装することもできます。

.pyの置き換え

f = open("index.html",'r') # open file with read permissions
filedata = f.read() # read contents
f.close() # closes file
filedata = filedata.replace("1111", "1234") # replace 1111 with 1234
filedata = filedata.replace("2222", "2345") # you can add as many replace rules as u need
f = open("index.html",'w') # open the same (or another) file with write permissions
f.write(filedata) # update it replacing the previous strings 
f.close() # closes the file

次に、次を実行します。

python replace.py

答え2

サンプルファイルtest.txt

should not touch 1111
<body>
should touch 1111
</body>
should not touch 1111

使用GNU Awk 3.1.7

awk 'BEGIN {s=0};{if (/<body/) {s=1;} else if (/<\/body>/) {s=0;};if (s) {gsub(1111,1234)}};1' test.txt

結果

should not touch 1111
<body>
should touch 1234
</body>
should not touch 1111

答え3

sed(1) Stream EEditor は (正規表現) 検索と置換のための優れたツールです。

確認する man 1 sed

sed -e s/foo/bar/g infile > outfile

正規表現「foo」に一致するすべての項目は、代替「bar」に置き換えられます。

PS。-r交換部品で逆参照を使用する必要がある場合は、このフラグを使用してください。

関連情報