bashでn番目の後にテキストを追加するには?

bashでn番目の後にテキストを追加するには?

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

置換部分には&実際にはパターンと一致する入力文字列のビットがあり、最後には22番目の重複しない一致に対してのみ置換を発生させるフラグがあります。

はいご意見に(ほぼ同じですが、スペースは挿入されていません):

$ 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:]]

関連情報