OS Xのフォルダ内のすべての.phpファイルの文字を置き換える方法は?

OS Xのフォルダ内のすべての.phpファイルの文字を置き換える方法は?

次の文字を置き換える必要があります。

àと共に

âと

ワナ

řとs

śとt

代替項目は大文字と小文字を区別する必要があります。たとえば、文字が大文字の場合は大文字に置き換える必要があります。

このプロセスで使用できることを読んでいますsedが、どのように使用するのかわかりません。端末で実行する必要がある正確なコマンドを書くのに役立つ人はいますか?

答え1

このタイプのタスクには一般的に使用されていますが、sed実際にはそのタスク用に設計されていません。名前は次のとおりです。小川編集する。

このツールは非対話型用に設計されています。文書編集はex.(vi「ビジュアルエディタ」の一形態ですex。)特にファイルをその場で編集したいex場合sed

この場合、使用されるコマンドはsed以前に提供されたコマンドとほぼ同じですが、必ずしもそうする必要はありません。以下はPOSIXに準拠しています(そして異なりますsed -i)。

for file in *.php; do ex -sc '%s/[ăâ]/a/ge | %s/ș/s/ge | %s/ț/t/ge | %s/î/i/ge | x' "$file" ; done

説明する:

-sバッチを準備するには、「自動モード」を起動します。 -c実行するコマンドを指定します。

%ファイルのすべての行に次のコマンドを適用することを意味します。コマンドs///は非常に自明です。e最後のフラグは、すべてのエラー(パターンが見つからないため)が抑制され、ファイル処理が続行されることを意味します。

|コマンド区切り記号です(パイプではありません)。

xexファイルに書き込む変更を通知します(ただし、ファイルがある場合にのみ)。はい変更)して終了します。


内部ファイルを編集したい場合は、exこのツールを選択してください。変更を適用する前にプレビューするには、以下をお勧めします。@gardenheadが提案したように使用されますtr

(もちろん、適切なバージョン管理システム(gitなど)を使用している場合は、適切に変更して実行してexファイルを以前のバージョンと比較することができますgit diff。)

答え2

sedtr動作しますが、翻訳文字を使用する方がはるかに簡単です。

for file in *.php; do tr 'ăâîșțĂÂÎȘȚ' 'aaistaaist' < "${file}" > "translated_${file}"

そのエントリ(マルチバイト文字をサポートしていないOS / X以外のsedGNUシステムに必要です)は次のとおりです。tr

sed 'y/ăâîșțĂÂÎȘȚ/aaistaaist/'

答え3

数式を使用して文字を置き換えることができますsed s/old_string/new_string/

マンページから:

sed - stream editor for filtering and transforming text

s/regexp/replacement/
              Attempt to match regexp against the pattern space.  If successful, replace that  portion  matched  with
              replacement.   The replacement may contain the special character & to refer to that portion of the pat‐
              tern space which matched, and the special escapes \1 through \9 to refer to the corresponding  matching
              sub-expressions in the regexp.

置き換えたい文字セットがある場合は、replace.sed次のように代替定義を含むファイルを生成することをお勧めします(例:)。

$ cat replace.sed
s/ă/a/g
s/â/a/g
s/î/i/g
s/ș/s/g
s/ț/t/g

その後、次のように実行できます。

  • sed -f replace.sed < old.php > new.php

    指定した文字をreplace.sed新しい文字に置き換えてold.php次に出力します。new.php

  • sed -i -f replace.sed file.php

    file.php指定された文字も置き換える代替項目replace.sed

    マンページから:

    -i[SUFFIX], --in-place[=SUFFIX]
    
                  edit files in place (makes backup if SUFFIX supplied)
    

あるいは、1行に両方を定義することもできます。

sed -e 's/ă/a/g' -e 's/â/a/g' -e 's/î/i/g' -e 's/ș/s/g' -e 's/ț/t/g'

すべてのファイルに対してこれを行うには、.php次のようなコマンドを使用できます。

  • find . -name "*.php" -exec sed -i '' -f replace.sed '{}' \;
  • for i in *.php; do sed -i '' -f replace.sed "$i"; done

注:場所を現在のディレクトリに限定するには、-maxdepth 1withを使用します。入場find*.phpman sedより多くの情報を知りたいです。

答え4

GUIツールを好むなら試してみることができますジェディット。フォルダ(ディレクトリ)検索など、優れた検索と置換機能を備えています。必要に応じて正規表現を使用できます。 Super Searchは結果とともに別のウィンドウを表示します。

ジェジット検索

関連情報