• 締切済み

sedコマンドの使い方 linux

linux勉強中です。 やりたいことは以下です。 sample.txtというファイルには1行ごとにファイルパスが記載されています。 パスの中にhogeが複数含まれており、2番目のhoge以下のパスを取得したい。 (例)sample.txt home/user1/hoge/…/…/…/hoge/…/…/hoge/test.jsp home/user1/hoge/…/…/…/hoge/…/…/hoge/…/test2.jsp : の場合だと /hoge/…/…/hoge/test.jsp /hoge/…/…/hoge/…/test2.jspをアウトプットとして出したい。 以下の構文を書いたのですがこれだと最後のhoge以下のパスは取れるのですが真ん中のが取れず… grep 'hoge' sample.txt | sed s/'.*hoge'/'hoge'/g > output.txt sedで出来るのかなと思っているのですが、もっといいやり方などあればご教授ください。 よろしくお願いします

みんなの回答

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.1

grep 'hoge' sample.txt | sed 's/\/hoge/(mark)&/2;s/^.*(mark)//' > output.txt 一度の置換では難しいので、2回に分けて行なっています。最初の置換で2番目の /hoge の前に印を付けて、2度目の置換で先頭から印までを削除しています。なお、(mark) は対象文字列に含まれなければ、例えばスペース1個でもかまいません。