
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
名前付きファイル(スペース、改行、またはタブを含む)がある場合は、変数を引用することを忘れないでください。私も-i
GNU 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