- ベストアンサー
SEDで教えてください。
Perlのカテで申し訳ないのですが、SEDの記述で教えてください。 次のテキストの”ページ 105”以外の部分をすべて削除する処理の記述はどのようにしたらよいのでしょうか? ページの次の数字105は、いろんな数字が出てきます。 残す部分以外の文字列もいろんなものが出てきます。 ------テキスト--------------- あいうえお ページ 105:かきくけこ1000円さしすせそ。 たちつてと ------------------------------ ↓ -----処理後------------------- ページ 105 ------------------------------
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
醜いですがいかがでしょうか? ○元のファイル org.txt ○テンポラリファイル tmp.txt ○結果ファイル result.txt sed '/ページ [0-9]*:/!d' org.txt > tmp.txt sed 's/:.*$/:/' tmp.txt > result.txt
その他の回答 (6)
- nightowl
- ベストアンサー率44% (490/1101)
今では sed も古典芸能になってしまったようですね。 本当は sed の実力からすれば1行でも書けます。 sed -n '/^ページ/s/:.*//p' text あるいは sed -n '/^ページ/s/^\(ページ[ 0-9][ 0-9]*\).*/\1/p' text しかし、いくら困り度1だからって何日もほったらかしでいいって ことにはならないと思うけど。
- shiroshi_1970
- ベストアンサー率50% (3/6)
これでどうですか?? s/^ページ \([0-9]+\):\(.*\)/ページ \1:/g s/^\([^ペ]\)\(.*\)//g ただし、頭にぺがつく行がのこりますので、あとで、その行を削除してください。 完璧でなくてごめんなさい。
- nightowl
- ベストアンサー率44% (490/1101)
こんばんは。要は「:」以降を削除すればいいのでしょう。 sed '/^ページ/{ s/:.*// p } d' text なんていかがです。
- aton
- ベストアンサー率47% (160/334)
No.3です。訂正と補足です。 s/\(ページ[1-9][0-9]*\)/\1/ の方が良いと思われます。 「ページ...」を含まない行の削除はNo.1,No.2のかたの方法を利用してください。 #ホールドスペースを使えば1回で書けるかもしれませんが。
- aton
- ベストアンサー率47% (160/334)
\( .. \) を使えばいいのではないでしょうか? s/\(ページ105\)/\1/ 但し「ページ105」が2行以上出現する場合全部残ります。 #No.1のかたの方法だと「かきく~せそ。」も #残ってしまうのではないでしょうか?
- 春原 なの(@ymda)
- ベストアンサー率37% (668/1777)
どうしても、sedでなければだめですか? 案外、grep ですと簡単に抽出できます cat ほにゃらら.txt | grep '^ページ105' > 処理後ファイル
お礼
お答えありがとうございます。 grep検索ですね。。ページ105の105の部分が201だったり、305だったり各種あります。 105の部分を変数のようにできますでしょうか?
お礼
お答えありがとうございます。 さっそく、やってみましたところ、うまく出来ました。 !dは初めて知ったので、また使ってみようと思います。