標準入力からn番目の単語を削除する方法は?

標準入力からn番目の単語を削除する方法は?

与えられたNの標準入力からN番目の単語を削除するスクリプトを作成したいと思います。たとえば、次の入力の場合:

One two three four, five
six seven eight, nine

8番目の単語を削除するように求められたら削除する必要がありますeight,。私の目的によると、単語は空白ではなく文字のシーケンスです。

One two three four, five
six seven  nine

標準のコマンドラインユーティリティを使用してこれを実行できる巧妙なシングルライナーはありますか?現在、これを行うための非常に長いスクリプトがありますが、過度に過度に見えます。

ベストアンサー1

そしてperl

$ perl -pe 's/\S+/++$c == 8 ? "" : $&/ge' <your-file
One two three four, five
six seven  nine
$ perl -pse 's/\S+/--$n ? $& : ""/ge' -- -n=8 <your-file
One two three four, five
six seven  nine

または、少し最適化してsn番目の単語が見つかった場合は、置き換えを実行しません。

perl -pse 's/\S+/--$n ? $& : ""/ge if $n > 0' -- -n=8 <your-file

おすすめ記事