次の文字を置き換える必要があります。
àと共に
âと
ワナ
řと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
最後のフラグは、すべてのエラー(パターンが見つからないため)が抑制され、ファイル処理が続行されることを意味します。
|
コマンド区切り記号です(パイプではありません)。
x
ex
ファイルに書き込む変更を通知します(ただし、ファイルがある場合にのみ)。はい変更)して終了します。
内部ファイルを編集したい場合は、ex
このツールを選択してください。変更を適用する前にプレビューするには、以下をお勧めします。@gardenheadが提案したように使用されますtr
。
(もちろん、適切なバージョン管理システム(gitなど)を使用している場合は、適切に変更して実行してex
ファイルを以前のバージョンと比較することができますgit diff
。)
答え2
sed
tr
動作しますが、翻訳文字を使用する方がはるかに簡単です。
for file in *.php; do tr 'ăâîșțĂÂÎȘȚ' 'aaistaaist' < "${file}" > "translated_${file}"
そのエントリ(マルチバイト文字をサポートしていないOS / X以外のsed
GNUシステムに必要です)は次のとおりです。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 1
withを使用します。入場find
*.php
man sed
より多くの情報を知りたいです。
答え4
GUIツールを好むなら試してみることができますジェディット。フォルダ(ディレクトリ)検索など、優れた検索と置換機能を備えています。必要に応じて正規表現を使用できます。 Super Searchは結果とともに別のウィンドウを表示します。