質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
grep

grepはコマンドライン上でテキスト検索を可能にするユーティリティーです。元はUnixのために用意されたものです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

Q&A

解決済

2回答

1865閲覧

awk grep 正規表現 の使い方が分からない。

teityura

総合スコア84

grep

grepはコマンドライン上でテキスト検索を可能にするユーティリティーです。元はUnixのために用意されたものです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

0グッド

0クリップ

投稿2017/06/17 10:18

###前提・実現したいこと
awk,grep等で正規表現で文字列を指定し、
その文字列のある行次にその文字列がある行の1行上まで取得したい。

例えば、Yahoo天気(https://weather.yahoo.co.jp/weather/jp/27/6200.html)の

<p class="date">6月17日(土)</p>の行から <p class="date">6月18日(日)</p>の1行上までを表示したいです。

###該当のソースコード

curl -s "https://weather.yahoo.co.jp/weather/jp/27/6200.html"

例えば、このコマンドで

curl -s "https://weather.yahoo.co.jp/weather/jp/27/6200.html" | grep "<p class=\"date\">" ```ヒット行だけ表示できますが、 ```ここに言語を入力 <p class="date">6月17日(土)</p> <p class="date">6月18日(日)</p>

このように正規表現を使用して、

curl -s "https://weather.yahoo.co.jp/weather/jp/27/6200.html" | grep? awk? 【<p class="date">[0-9]+月[0-9]+日(月火水目金土日)</p>】?

その文字列のある行次にその文字列がある行の1行上まで取得したいのです。

###試したこと
awkコマンドの区切り文字に【<p class="date">[0-9]+月[0-9]+日(月火水目金土日)</p>】を指定して、'{print $2}'を表示しようとしたが、awkの書式が分からず上手くいきませんでした。

###補足
【[0-9]+月[0-9]+日】の行からその1行上まで表示する方法をご教授ください。

実行後の結果が

<p class="date">6月17日(土)</p> <p class="pict"><img src="https://s.yimg.jp/images/weather/general/forecast/size75/moon.gif" border="0" alt="晴れ">晴れ</p> <ul class="temp"> ........略........

となり(表示している)、........略........の1行下には<p class="date">6月18日(日)</p>がある(表示していない)状態。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

<p class="date">6月17日(土)</p>の行から
<p class="date">6月18日(日)</p>の1行上までを表示したいです。

Bash

1~~ | sed -n '/<p class="date">6月17日(土)<\/p>/,/<p class="date">6月18日(日)<\/p>/p' | sed '$d'

補足の方は、意味がわかりません。

投稿2017/06/18 17:05

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teityura

2017/06/22 13:14

ありがとうございます。 こちらも参考にしてみたいと思います。
guest

0

ベストアンサー

awkだと行指向をそのまま生かし多少のスクリプトを書いた方が自分にはわかりやすいです。

パターンが含まれる最初の行から2回目に出現する直前の行までを出力し、それ以降を無視するのでよければ次のような感じです。

... | awk '/パターン/ { f=!f; if (!f) exit } f'

投稿2017/06/17 11:07

編集2017/06/17 11:08
KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teityura

2017/06/22 13:14

やりたかったことができました! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問