GNU/Linux >> Linux の 問題 >  >> Linux

先読みを使用して正規表現で特殊文字を除外する方法

grep をスキップできます 単一の awk でこれを完了します :

xrandr | awk 'NF >= 3 && /[0-9]+x[0-9]+/ {sub(/[+-].*/, "", $3); print $3}'

1920x1200
1920x1200
primary
1029x1200

代替シングル gnu grep 解決策:

xrandr | grep -oP 'connected\h+\K(\d+x\d+|\S+)'

(.*\d+x\d+)*^(?![\+]+\d\+\d) パターンは、グループ 1 に一致し、改行文字以外の 0 個以上の文字の任意のシーケンスを可能な限り多く、次に 1 桁以上、x にキャプチャします。 、1桁以上、そして文字列位置の開始が必要です(これにより、パターンは常に失敗します! ) そして、1 つ以上の + がないことを確認します 文字、数字、+ 現在位置のすぐ右側の数字。 これは、どの文字列とも一致しない非常に壊れたパターンのようです。

ロジックは次のように実装できます

xandr | grep -oP '\b\d+x\d+(?!(?:\+\d+\+)?\d)'

オンライン デモと正規表現デモをご覧ください。

詳細 :

  • -oP - 一致のみを出力し、PCRE 正規表現エンジンを有効にします
  • \b\d+x\d+(?!(?:\+\d+\+)?\d) :
    • \b - 単語境界
    • \d+ - 1 つ以上の数字
    • x - x
    • \d+ - 1 つ以上の数字
    • (?!(?:\+\d+\+)?\d) - 現在の場所のすぐ右にある場合、一致に失敗する否定的な先読み
    • (?:\+\d+\+)? - + のオプションのシーケンス 、1 つ以上の数字および +
    • \d - 数字

Linux
  1. Cat、Tac、More、Less の使用方法 – Linux コマンド

  2. printfを使用しているときに、シェルスクリプトで特殊文字をエスケープする方法は?

  3. Linuxで特殊文字を入力するには?

  1. Linux で find を使用して先読みと後読みの正規表現を使用するにはどうすればよいですか?

  2. Bashで二重文字を見つけるための正規表現

  3. 行が 60 文字を超える場合に改行を挿入する方法

  1. LinuxでBusyBoxを使用する方法

  2. Unixシェルで特殊文字を通常の文字として使用するにはどうすればよいですか?

  3. 正規表現を使用して TAR アーカイブからファイルを除外する方法は?