私はmacOSを使用しており、次のsed
コマンドを使用して特定の単語を見つけて別の単語に置き換えようとしていますが、何の変更もありません。問題は何ですか?
sed 's/\<cat\>/dog/g' tt.txt
答え1
sed
[[:<:]]
代わりに使用\<
してmacOSで[[:>:]]
置き換えてください\>
。また、macOSの実装はワード境界モードをsed
サポートしていません。 macOSのドキュメントに記載されてい\b
ますが、sed(1)
re_format(7)
する\<
、\>
およびを参照してください\b
。
ファイル自体は変更されません。
sed 's/[[:<:]]cat[[:>:]]/dog/g' tt.txt
起こる唯一のことは、sed
ファイルを読み取り、各入力行に式を適用することです。その後、変換されたデータを標準出力に書き込みます。
出力を新しいファイルに保存するには、次のようにします。
sed 's/[[:<:]]cat[[:>:]]/dog/g' tt.txt >tt.txt-new
その後、元のファイルを新しいデータに置き換えることができます。
sed 's/[[:<:]]cat[[:>:]]/dog/g' tt.txt >tt.txt-new && mv tt.txt-new tt.txt
macOSでは、次のコマンドを使用して内部変換を実行することもできます。
sed -i '' 's/[[:<:]]cat[[:>:]]/dog/g' tt.txt
マニュアルには次のように記載されていますが、
ディスク容量不足などの状況でコンテンツが破損したり部分的に発生する危険性があるため、ファイルを内部で編集するときに長さゼロの拡張子を指定しないことをお勧めします。
答え2
テキストの順序が正しい場合は、\<cat\>
交換する必要があります。しかし、私の考えは<cat>
これだけを試していると思います:
sed 's/<cat>/dog/g' tt.txt
一重引用符は、それらの間の文字が解釈されるのを防ぎます。
答え3
-i
ファイルを編集するには、sedの後に追加する必要があります。たとえば、次のようになります。
sed -i 's/cat/dog/g' tt.txt
完全に機能する必要があります。