web-dev-qa-db-ja.com

テキストファイルの各行でn番目に出現する文字列を置き換える

スペースで区切られた文字列(2-5)を含む大きなテキストファイルがあります。文字列には「 '」または「-」を含めることができます。 2つ目のスペースをパイプに置き換えたいと思います。

行くための最良の方法は何ですか?

Sedを使用して私はこれを考えていました:

sed -r 's/(^[a-z'-]+ [a-z'-]+\b) /\1|/' filename.txt

他の/より良い/よりシンプルなアイデア?

15
dnkb

代替コマンドの最後に番号を追加できます。たとえば、次の例では、2番目に出現するoldを、newの各行の文字列fileに置き換えます。

sed 's/old/new/2' file

したがって、提案されたソリューションの代わりに、以下を使用できます。

sed 's/ /|/2'

詳細については、例を参照してください。 このsedチュートリアル

21
mrucci

バージョンを試しましたか?うまくいきましたか?基本的にはいい考えだと思うので。ただし、少し異なる方法で行います。

sed -re 's/^([^ ]+ +[^ ]+) /\1|/'

これは、スペースではないWord内のすべての文字を受け入れ、最初の2つの単語の間に複数のスペースを受け入れます。

1
petersohn