如何选择具有sed或awk的行之间的特定字符串,而不打印整行

时间:2016-09-05 15:01:29

标签: bash shell unix awk sed

我想用sed或awk在一个大的txt文件中的一行中选择一个特定的字符串。但我总是得到整行,每行长达100.000+个字符。

我得到了例子:

</div><div class="follow   withFollow" id="user-id-1234567890"> <a href="/app/users/id-1234567890/test/ </div><div class="follow   withFollow" id="user-id-0123456789"> <a href="/app/users/id-0123456789/test/" 12345678990 1234877890 1234767890 1245456780 123456790 withFollow" id="user-id-9873456789">

我唯一想要的是数字:

withFollow" id="user-id-1234567890">, withFollow" id="user-id-0123456789">, withFollow" id="user-id-9873456789">

输出:

1234567890
0123456789
9873456789

我尝试了很多:

sed -n '/**user-id-**/,/**">**/p' FILE
awk '/**user-id-**/,/**">**/p' FILE
awk '/**user-id-**/,/**">**/p' FILE | grep -Eo "[0-9]{1,15}" > output.txt

对于最后一个,我只在同一行中得到其他数字,因此不仅在id="user-id-1234567890">内。

1 个答案:

答案 0 :(得分:3)

您可以使用grep:

void switchLED(){
  int connectionId = Serial1.parseInt();
  Serial1.find("LED=");
  int setLED = Serial1.parseInt();
  Serial.println("Conn: " + String(connectionId) + ", LED: " + String(setLED));
  if (setLED == 1){
    digitalWrite(LED, HIGH);
    nanoSerial.println("LED=1");
  } else {
    digitalWrite(LED, LOW);
    nanoSerial.println("LED=0");
  }
  delay(100);
  Serial1.println("AT+CIPSEND=" + String(connectionId) + ",145");
  delay(100);
  Serial1.println("HTTP/1.1 200 OK");
  Serial1.println("Access-Control-Allow-Origin: *");
  Serial1.println("Content-Length:05");
  Serial1.println("Connection: close");
  Serial1.println("Content-Type: application/x-www-form-urlencoded");
  Serial1.println("");
  Serial1.println("LED=" + String(setLED));
  delay(500);
  Serial1.println("AT+CIPCLOSE=" + String(connectionId));
}

或者,如果您只想匹配数字:

{{1}}