シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。
正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。
Q&A
解決済
2回答
2719閲覧
総合スコア3
0グッド
0クリップ
投稿2022/11/21 00:12
0
次のような空行で区切られた文のブロックがあったときに、各ブロックの先頭から2行目を抽出するような正規表現はどのように書けばよいでしょうか。この例ですと111, 333, mmを抽出したいです。 スクリプトならサクッとかけそうですが、正規表現でできないか気になります。
000 111 aaa 222 333 nn mm
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
質問へのコメント
回答2件
発想はmelian案と同じようなものですが、perlでやってみます。
perl -le '$_=join("",<>); @r = /(?:\A|(?<=\n\n)).+\n\K(.+)\n/g; print join("\n",@r)' input.txt
しかしどう考えても正規表現によらない文字列の分割で処理したほうが楽です。 フィールドセパレータとレコードセパレータを変更して、複行レコードを処理できるようにします。
perl -alne 'BEGIN{$/=""; $\="\n"} print "$F[1]\n"' input.txt
全く同じ作戦ですが、awkならもっとシンプル。
gawk 'BEGIN{FS="\n"; RS="\n\n"}{print $2}' input.txt
投稿2022/11/21 08:29
総合スコア13727
ベストアンサー
GNU grep の場合(PCRE)。
bash1$ grep --version 2grep (GNU grep) 3.7 3 4$ grep -zPo '(\A|(?<=\n\n)).+\n\K.+\n' data.txt 5111 6333 7mm
bash
1$ grep --version 2grep (GNU grep) 3.7 3 4$ grep -zPo '(\A|(?<=\n\n)).+\n\K.+\n' data.txt 5111 6333 7mm
投稿2022/11/21 01:23
総合スコア21514
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
15分調べてもわからないことはteratailで質問しよう!
ただいまの回答率85.29%
質問をまとめることで思考を整理して素早く解決
テンプレート機能で簡単に質問をまとめる
正規表現でN行目を抽出する方法
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。