4

この質問は、哲学的にはここで何度も出てくる質問に似ています。

しかし、それらは(最後のものを除いて)すべて単純な交換を扱います。多くのファイルに表示されるやや大きなコードブロックがあり(ソースコードのコピー/貼り付けが法律で罰せられることを望みます)、それを置き換える必要があります。

ここで私を助ける何かがありますか?ブロックを「sed」することは避けたいと思います(上記の3番目の同様の質問で行われるように)。これは1日の大部分を占めるためです。特定のテキストエディタを一時的にインストールする必要がある場合は、そうしてください。

4

2 に答える 2

5

あなたの質問の良いところは、正規表現ではなく固定文字列を扱っていることです...これにより、問題が比較的単純になります。あまり問題なく、あなたのために何かを書くことができます。

私がリンクしたソリューションは最適ではありませんが、機能し、開始/終了行のみの一致に依存しません (つまり、逐語一致のみを置き換えます)。基本的な考え方は次のとおりです。

  • 探しているものを定義するファイルを読み込み、
  • 置換を定義するファイルを読み込み、
  • 他のすべての引数を反復処理し、検索文字列を探して置換テキストに置き換えます
于 2012-05-11T19:45:11.953 に答える
1

開始行と終了行が一意である場合は、ブロックを削除して、次を使用してsedを使用してコードに置き換えることができます。

placeholder=somereallyuniquestringthatwillneverbematched
for i in *.php; do
    # Remove original block using first and last line matching and add placeholder
    sed -i -e "/The text of the closing line/a\
$placeholder
/The Text of the opening Line/,/The Text Of The Closing Line/d" "$i"
     # Replace placeholder with desired code
     sed -i -e "s/$placeholder/#include ('include/menu.php');/" "$i"
 done

これにより、ファイルごとに1つのブロックのみが検出されます。いつものように、最初にバックアップを作成します。

于 2012-05-11T19:39:50.767 に答える