我正在嘗試提取包含符號 / 和 * 的兩個字串之間的文本。我相信這是正則運算式命令中斷的原因。所以我的起始字串是“/25043*”,我的結束字串是“*25043/”。我從文本檔案中提取了這兩個字串(包括這兩個字串)之間的文本。
我試過這個使用: grep -o -P '(?<="/25043*").*(?="*25043/")' code.txt
這給了我一個錯誤: "grep: lookbehind assertion is not fixed length"
我的輸入檔案:
#include <stdio.h>
#include <stdlib.h>
#define MAX 256
/25043/definiramo konstanto MAX
int main(){
/25043*Vstopna tocka programa
Ne uporabljamo parameterov pri main, kjer jih ne potrebujemo
*25043/
printf("");/25043/izpis vrednosti konstante MAX
return 0;
}
/25043/Koncamo z izvajanjem programa
我想要的輸出:
/25043*Vstopna tocka programa
Ne uporabljamo parameterov pri main, kjer jih ne potrebujemo
*25043/
uj5u.com熱心網友回復:
問題的解決方案是使用 sed 而不是 grep。
使用的答案: sed -n '/\/25043\*/,/\*25043\//{p}' code.txt
uj5u.com熱心網友回復:
使用grep -Po,您可以使用grep -oPz '(?s)/25043\*.*?\*25043/' file,但此解決方案有一些缺點,即提取的值之前沒有行內容/25043*并且末尾沒有尾隨換行符。
這里最好的方法是使用awk:
awk '/\/25043\*/,/\*25043\//' file
輸出:
/25043*Vstopna tocka programa
Ne uporabljamo parameterov pri main, kjer jih ne potrebujemo
*25043/
請注意,/并*要在這里逃脫(/是一個正則運算式分隔符字符,并且*是一個特殊的正則運算式元字符)。
uj5u.com熱心網友回復:
編輯:
基于 OP 編輯??嘗試使用-z,因為它將視為大字串,因此:
grep -zoP '/25043\*(.|\s)*\*25043/' code.txt
原始答案:
你有沒有試過不分組的情況下做到這一點?像這樣:
示例假設code.txt:
asdf asdfasd /25403* asdf *25043/ asdfa asdfa
命令:
grep -o '/25403\* .* \*25043/' code.txt
結果是:
/25403* asdf *25043/
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/393521.html
