sed は小文字と大文字の文字列を置き換えます。

sed は小文字と大文字の文字列を置き換えます。

sedを使用して各インスタンスを交換しようとしています。古いファイルに新しい。今は小文字の文字列で動作しますが、いくつかの大文字の文字列を置き換える必要があります。たとえば、交換古いそして新しい。 sedがこれを行うことができることを知っていますが、正しく実行できませんか?

for file in .; do
  cat $file
  sed 's/old/new/g' $file | tee $file
done

答え1

iコマンドの/Iフラグを知っていますかs(GNU拡張にもかかわらず)?

答え2

「old」を「new」に変更し、「OLD」を「NEW」に置き換えるには、sedに次の2つの操作を実行するように指示します。

for file in ./*; do
  cat "$file"
  sed -i -e 's/old/new/g; s/OLD/NEW/g' "$file"
done

some filename名前付きファイル(スペース、改行、またはタブを含む)がある場合は、変数を引用することを忘れないでください。私も-iGNU sed拡張を追加しました。GNU /i フラグ拡張が使用可能であることを示します。、sedにバッファに依存せずにファイルを編集するように指示しますtee

答え3

パールが利用可能です:

$ cat file
old news
OLD news
old Old oLD news
older news
$ perl -pe 's{(old)}{ ($tmp = $1) =~ tr/OLDold/NEWnew/; $tmp }ieg' file
new news
NEW news
new New nEW news
newer news

s///検索と置換には演算子を使用し、置換には演算子を使用します。音域文字は「前」から「新しい」に変わり、個々の文字の大文字と小文字はそのまま残ります。これは、「old」と「new」の文字列の長さが同じであるために機能します。

$1読み取り専用の値なので、一時変数を使用する必要があります。

答え4

文字列のサイズが等しい場合、次のコマンドはすべて機能します。

<infile sed    'y/OLDold/NEWnew/' >outfile
<infile tr     'OLDold'  'NEWnew' >outfile
        sed -i 'y/OLDold/NEWnew/' infile

関連情報