移行プロセスでは、bashスクリプトでいくつかの代替操作を実行する必要があります。
したがって、私の.txtファイルには次の引用符があります。
{{Info DOC
|author= ME
|company= MY COMPANY
|classification= RESTRICTED
}}
私がしなければならないのは、次の形式を使用してこれらのイベントをすべて編集することです。
=== Info DOC ===
|author= ME
|company= MY COMPANY
|classification= RESTRICTED
- {{}}削除されました。
- === === 最初の行に追加されました。
私がやろうとしているのは、代替操作を実行するためにsed正規表現を作成することです。
sed -i -e 's/{{Info DOC/=== Info DOC ===/g' test_file.txt
したがって、期待どおりに機能しますが、文字列 "}}"では同じ操作を実行できません。なぜなら予想通りにもっと一致するからです。
次のように実装しようとしています。
find . -name '*.txt' -exec perl -i -pe 's/{{Info DOC\(.*\)}}/=== Info DOC ===\n\1/g' {} \;
私にいくつかの手がかりを与えてくれればいいと思います!みんなありがとうございます!
最後の解決策:(@Sundeepに感謝)
find . -name '*.txt' -exec perl -i -0777 -pe 's/\{\{(Info DOC)(.*?)\}\}\n/=== $1 ===$2/sg' {} \;
PS:私はMacOSシステムでbash v4を使用しています。
答え1
以下を試してください。
$ # tested on GNU-sed, not sure of syntax for other versions
$ sed '/{{Info DOC/,/}}/ { s/{{\(Info DOC\)/=== \1 ===/; /}}/d }' ip.txt
=== Info DOC ===
|author= ME
|company= MY COMPANY
|classification= RESTRICTED
/{{Info DOC/,/}}/
包含線から{{Info DOC
包含線へ}}
(参照範囲アドレス詳細)s/{{\(Info DOC\)/=== \1 ===/
必要に応じて変換/}}/d
これを削除する- 残りの行は変更されません。
そしてperl
$ perl -0777 -pe 's/\{\{(Info DOC)(.*?)\}\}\n/=== $1 ===$2/sg' ip.txt
=== Info DOC ===
|author= ME
|company= MY COMPANY
|classification= RESTRICTED
-0777
フルファイルをフルルック飲むので、このソリューションは大きすぎる入力ファイルには適していません。.*?
貪欲ではないマッチs
修飾子は.
改行文字の一致も許可します。