たとえば、大容量ファイルには次のものが含まれます。
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
最も簡単には、これは/16
acrossに変更され[[[/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+
置き換えます。周囲を見回すと予期しない内容(または交換する場合)によっては、演算子の内容を調整して見回す必要があります。または、交換したい場合、または、または内部に表示されていても、完全に取り外すことができます。16
16
(?<!...)
(?!...)
!
=
/16
/16
s
http://16.1.2.3/
1/16
blah/16.12e-20
/1654321
[[[/16]]]
答え4
正確なマッチングを実行したい場合は、提供されている他のソリューションに加えて、次のコマンドが役に立ちます。
sed 's#/16#[[[/16]]]#g' yourfilename
これ説明する次のように:
sed
ファイルやパイプなどの入力ストリームのテキストを変更するために設計されたユーティリティです。- この
s
コマンドは、テキストの置換または置換に使用されます。検索パターンとの競合を避けるために、コマンドの区切り文字#
として使用されます。s
/
/16
探している特定の文字列を表し、[[[/16]]]
それを置き換える文字列です。g
最後のフラグはグローバル置換を示します。