helloworld.txtがあるとしましょう。
hello world
sedを使用してください:
sed 's/w*/goodbye/' helloworld.txt
私にしてください:
goodbyehello world
そして:
sed 's/$/goodbye/' helloworld.txt
私にしてください:
hello worldgoodbye
しかし、テキストを追加する方法後ろに初めて表示されるので、次のようになります。
hellogoodbye world
答え1
特定の発生の前後にテキストを挿入することについて話しているとします。性格一行のテキストで。
$ echo 'word1 word2 word3 word4' | sed 's/\<[[:alnum:]]\{1,\}\>/newword &/'
newword word1 word2 word3 word4
$ echo 'word1 word2 word3 word4' | sed 's/\<[[:alnum:]]\{1,\}\>/& newword/'
word1 newword word2 word3 word4
$ echo 'word1 word2 word3 word4' | sed 's/\<[[:alnum:]]\{1,\}\>/& newword/2'
word1 word2 newword word3 word4
$ echo 'word1 word2 word3 word4' | sed 's/\<[[:alnum:]]\{1,\}\>/& newword/3'
word1 word2 word3 newword word4
$ echo 'word1 word2 word3 word4' | sed 's/\<[[:alnum:]]\{1,\}\>/& newword/4'
word1 word2 word3 word4 newword
これnewword
により、文字列(前のスペースと一緒に)が与えられた文字列の他の場所に挿入されます。
表現sed
方式
s/\<[[:alnum:]]\{1,\}\>/& newword/2
英数字のみを含む空でない文字列の2番目の項目を置き換えます。
サイド\<
と\>
マッチングは、それぞれ単語の先頭と末尾の単語とシルバーの間の幅がゼロの境界と一致します(GNUではこれをsed
使用することもできます\b
)。これは単語全体が一致することを保証しますが、与えられたデータには実際には必要ありません(私がやっている作業の意図を強調するので、単語境界パターンを使用します)。
前のパターンが少なくとも1回一致するようにする拡張正規\{1,\}
表現で書かれた修飾子です(ただし、デフォルトはデフォルトの正規表現です)。+
sed
置換部分には&
実際にはパターンと一致する入力文字列のビットがあり、最後には2
2番目の重複しない一致に対してのみ置換を発生させるフラグがあります。
はいご意見に(ほぼ同じですが、スペースは挿入されていません):
$ echo '7DF258 01DB-MET-RX PASS' | sed 's/\<[[:alnum:]-]\{1,\}\>/&FIDUCIAL/'
7DF258FIDUCIAL 01DB-MET-RX PASS
$ echo '7DF258 01DB-MET-RX PASS' | sed 's/\<[[:alnum:]-]\{1,\}\>/&FIDUCIAL/2'
7DF258 01DB-MET-RXFIDUCIAL PASS
コメントに提供した例では、「word」にはダッシュも含まれていますが、これは私が[[:alnum:]-]
代わりに使用したものです[[:alnum:]]
。