sedコマンドで完全な単語のみを検索するにはどうすればよいですか?

sedコマンドで完全な単語のみを検索するにはどうすればよいですか?

私はLinuxに初めてアクセスし、最近コマンドラインの実験を始めました。ファイルを作成し、名前を「hi.txt」として指定することにしました。ファイルの内容は次のとおりです。

This is hi.txt.
hi 
hi
hi

このコマンドを使用して、ドキュメントsed -i 's/hi/hotel/g' hi.txtのすべての「hi」を「hotel」に変更しました。出力は次のとおりです。

Thotels is hotel.txt
hotel
hotel
hotel 

ご覧のとおり、「hi」という単語「This」も変更されました。これが起こらないようにする方法はありますか?

ベストアンサー1

このs///コマンドは、「search」パラメーターが次のようになると予想します。正規表現。ほとんどのバージョンでは、単語が単語と一致するか、単語の端の境界で幅がゼロの一致をsedサポートする必要があります。\bこの場合、「単語」は文字、数字、または下線()文字で定義されます_。たとえば、文字列がc++ファイルの独自の行にあると仮定すると、\b次の場所で一致します。

  1. 直前c
  2. cそして最初のものの間+
  3. 最後のものの直後です+

次のコマンドは目的の結果を提供します。

sed -i 's/\bhi\b/hotel/g' hi.txt

前に単語文字()があり、後に単語文字()があるため、単語はthis一致しません。ただし、周囲のスペースとすべて単語以外の文字であるため、文字列はの2番目のインスタンスで一致します。htisThis is hi.txthi.

おすすめ記事