파일에서 모든 "큰따옴표" 문자열을 찾으려면 다음을 사용합니다.
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
GNU sed
또는 호환 버전을 사용하세요.
$ 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");