Sed:N個の文字を置き換えます。

Sed:N個の文字を置き換えます。

sedスクリプトの各行で最初の5つの空白文字を変更したいと思います。これが私が今まで持っているものです

sed -e "s/ /;/" -e "s/ /;/" -e "s/ /;/" -e "s/ /;/" -e "s/ /;/" myfile

もっと良い方法がありますか?

ところで、私はSolaris sedを使用しています。それが違いをもたらすかどうかはわかりません。

ベストアンサー1

あなたの質問を読んで、少なくともGNU Sed(おそらくSolarisのものではないかもしれません)希望の逆機能:

g:最初の項目だけでなく、正規表現に一致するすべての項目に置換を適用します。

number: 正規表現の番号の一致のみを置き換えます。

Note: the posix standard does not specify what should happen when

現在、sed実装間で広く合意された意味のないgと数値修飾子を混在しています。 GNU sed の場合、相互作用は次のように定義されます。 3 番目の一致の前の一致を無視し、3 番目の一致以降のすべての一致を一致させ、置き換えます。

だから代わりに:

hmontoliu@ulises:/tmp/wb$ echo one two three four five six seven | sed 's/ /;/g5' 
one two three four five;six;seven

以下を実行して、必要なものを達成するためのより簡潔なコマンドを取得できます。

hmontoliu@ulises:/tmp/wb$ echo one two three four five six seven | sed -e 's/ /;/g' -e 's/;/ /6g'
one;two;three;four;five;six seven

Solarisの実装にこの機能があるかどうかを教えてください。

ファタイ

おすすめ記事