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

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

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

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

正規表現

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

Q&A

2回答

2345閲覧

grepにおける正規表現"()"の使い方について

hirdd

総合スコア50

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

正規表現

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

0グッド

0クリップ

投稿2017/03/07 01:59

正規表現の()の使い方について質問させてください。例えば、linuxにおける/dev/配下のブロックデバイス及びキャラクタデバイス(ls -lの行頭がbもしくはcのもの)のみ引っ掛けようとした場合、ls -l /dev/ | grep '^(b|c)'もしくは、ls -l /dev/ | grep '^b|^c'ではヒットしませんでした。その代わり、ls -l /dev/ | grep '^[bc]'では期待通りの結果が出ました。

私の認識では、()は正規表現をひとまとまりにするものなので、'^(b|c)'で問題ないと思ったのですが、何か勘違いをしているのでしょうか。ご存知の方、教えて頂けると幸いです。

[root@localhost ~]# ls -l /dev/ | grep '^(b|c)' [root@localhost ~]#
[root@localhost ~]# ls -l /dev/ | grep '^b|^c' [root@localhost ~]#
[root@localhost ~]# ls -l /dev/ | grep '^[bc]' crw-------. 1 root root 10, 235 3月 6 09:11 autofs crw-------. 1 root root 10, 234 3月 6 09:11 btrfs-control crw-------. 1 root root 5, 1 3月 6 09:12 console crw-------. 1 root root 10, 61 3月 6 09:11 cpu_dma_latency crw-------. 1 root root 10, 62 3月 6 09:11 crash brw-rw----. 1 root disk 253, 0 3月 6 09:11 dm-0 brw-rw----. 1 root disk 253, 1 3月 6 09:11 dm-1 brw-rw----. 1 root disk 253, 2 3月 6 09:11 dm-2

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

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

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

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

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

guest

回答2

0

バックスラッシュなしの(|)は拡張正規表現のメタ文字であるため、-Eオプションを指定するかegrepを使用してください。

どのUNIXコマンドでも使える正規表現

投稿2017/03/07 02:14

編集2017/03/07 02:21
SVC34

総合スコア1149

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

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

0

grep の正規表現で「(|)」を使うにはエスケープが必要です。
こんな感じでしょうか。

sh

1 2## ubuntu 14.x のターミナル で実行。 3 4$ ls -la /dev/ | grep "\(^[b\|c]\)" 5crw------- 1 root root 10, 58 10月 28 09:51 alarm 6crw------- 1 root root 10, 59 10月 28 09:51 ashmem 7crw------T 1 root root 10, 235 10月 28 09:51 autofs 8crw------- 1 root root 10, 60 10月 28 09:51 binder 9crw------T 1 root root 10, 234 10月 28 09:51 btrfs-control 10crw------- 1 root root 5, 1 10月 28 09:51 console 11crw------- 1 root root 10, 57 10月 28 09:51 cpu_dma_latency 12

投稿2017/03/07 02:12

tukuroku

総合スコア234

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

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

otn

2017/03/07 04:11

"(b|c)"に対応するものは"\(^b\|c\)" ですね。
ikedas

2017/03/07 04:51

「^\(b\|c\)」ですね。 ただし、「\(…\)」、「\|」等はGNU grepによるBREに対する拡張なので、他の実装では使えませんね。
tukuroku

2017/03/07 04:58

なるほど、勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問