特定の文字列を文字で囲む

特定の文字列を文字で囲む

たとえば、大容量ファイルには次のものが含まれます。

This is a /16 text file

次のように変更したいと思います。

This is a [[[/16]]]] text file

正しい文字列と一致させたい場合/16

これを行う方法はありますか?

答え1

次のファイルにこの内容があるとしましょう。text.txt

This is a /16 text file
This is another /8 text file
This is a /32 text file

私はあなたに役立つこのコマンドを見つけました。

sed -i 's/\/\([0-9]\+\)/[[[\/\1]]]/g' text.txt

答え2

最も簡単には、これは/16acrossに変更され[[[/16]]]]file元のコンテンツは次のように保持されますfile.bak

sed -i'.bak' 's!/16![[[&]]]]!g' file

一部のプラットフォームでは、バックアップを作成せずに内部編集のための-iサフィックスなし(ここ'.bak')または空のサフィックスを含む(たとえば)の使用をサポートできます。作成したい部分を''完全に削除してください。-i標準出力ソースファイルを編集する代わりに。

例えば、

echo 'This is a /16 text file' | sed 's!/16![[[&]]]]!g'

This is a [[[/16]]]] text file

あなたの指示によると、単語の境界を考慮しません。80/160はに置き換えられます80[[[/16]]]]0。また、コードは/8またはのように似ていますが、他のインスタンスを考慮しません/32。お願いします質問を編集してくださいそのような詳細を考慮する必要がありますか?

答え3

perl -pi -e 's|(?<!\S)/\d+(?!\S)|[[[$&]]]|g' your-file

/1つ以上の10進数()の後には、空白以外の文字()の前後にない1つ以上の10進数()で構成される+文字列が含まれています。\d(?<!...)(?!...)\S[[[...]]]

一連の10進数の代わりにリテラルと一致するように\d+置き換えます。周囲を見回すと予期しない内容(または交換する場合)によっては、演算子の内容を調整して見回す必要があります。または、交換したい場合、または、または内部に表示されていても、完全に取り外すことができます。1616(?<!...)(?!...)!=/16/16shttp://16.1.2.3/1/16blah/16.12e-20/1654321[[[/16]]]

答え4

正確なマッチングを実行したい場合は、提供されている他のソリューションに加えて、次のコマンドが役に立ちます。

 sed 's#/16#[[[/16]]]#g' yourfilename

これ説明する次のように:

  • sedファイルやパイプなどの入力ストリームのテキストを変更するために設計されたユーティリティです。
  • このsコマンドは、テキストの置換または置換に使用されます。検索パターンとの競合を避けるために、コマンドの区切り文字#として使用されます。s/
  • /16探している特定の文字列を表し、[[[/16]]]それを置き換える文字列です。
  • g最後のフラグはグローバル置換を示します。

関連情報