
ファイル内のすべての「二重引用符」文字列を見つけるには、次のようにします。
grep -rnw . -e "\".*\""
しかし、特定のテキストで始まるすべての行を除外したいと思います。たとえば、
#include
Serial.
たとえば、次の行があります。
#include "patterns.h"
#include "network.h"
Serial.println("clear");
Serial.println("set wifi");
#include "patterns.h"
#include "common.h"
Serial.printf("[LED] Init segment #%u with size %u\r\n", i + 1, len);
password = "xxxxxx";
ESPAsync_wifiManager.setCredentials(WM_config.WiFi_Creds.wifi_ssid, WM_config.WiFi_Creds.wifi_pw, "", "");
ESPAsync_wifiManager.setCORSHeader("Your Access-Control-Allow-Origin");
Serial.print(F("Starting configuration portal @ "));
Serial.print(F("192.168.4.1"));
コマンドは次の項目のみをリストする必要がありますgrep
。
password = "xxxxxx";
ESPAsync_wifiManager.setCredentials(WM_config.WiFi_Creds.wifi_ssid, WM_config.WiFi_Creds.wifi_pw, "", "");
ESPAsync_wifiManager.setCORSHeader("Your Access-Control-Allow-Origin");
答え1
PCREは負の予測をサポートします。
grep -Pe '^(?!Serial|#).*".*"'
^
行の始まりです。(?!...)
負の予測、つまりここでの意味は次のとおりです。行がSerial
またはで始まらない。#
答え2
sed
または、以下を使用してこれを実行できますawk
。
sed '/^#/d; /^Serial\./d; /".*"/!d' < your-file
awk '! /^(Serial\.|#)/ && /".*"/' < your-file
複数の文字を含む、またはで始まら"
ない戻り行。Serial.
#
次の行も返します。
Serial.whatever("Serial. not at the beginning");
foo(); // some "comment"
/* and "some"
"other" comment */
bar('"', '"');
答え3
-v
別の方法は、()フラグを使用して必要--invert-match
な行を除外することです。いいえgrep コマンドを希望し、一緒に接続します。
grep -v "^#include" | grep -v "^Serial\." | grep -rnw . -e "\".*\""
答え4
GNUsed
または互換バージョンを使用してください。
$ sed -En '/^(#|Serial)/!{/".*"/p}' input_file
password = "xxxxxx";
ESPAsync_wifiManager.setCredentials(WM_config.WiFi_Creds.wifi_ssid, WM_config.WiFi_Creds.wifi_pw, "", "");
ESPAsync_wifiManager.setCORSHeader("Your Access-Control-Allow-Origin");