簡體   English   中英

代碼中兩個模式之間的Grep

[英]Grep between two patterns in code

我有一個看起來像這樣的模式。

var a ; 
var b;

var obj = {
aa : 'This is what I want'
};

我想要aa : ''};之間的文本'};

可能會發生多次,但是我想擁有第一個。

我嘗試了awk,grep和sed。 但是它們都不給我完美的結果,而是吐出了全部代碼。

到目前為止,我一直在嘗試:

grep -Po "aa : \K.*(?= \'};)"
sed -e 's/aa :\(.*\)\n};/\1/'
awk -F"'" -v RS=";" '/\naa/{print $2;exit}'

請嘗試以下操作:

awk 'BEGIN {Found = 0;} /^aa :/{Found = 1; } /^};/{Found = 0;} {if(Found) {print $0;}}'

使用grep -oP可以使用match reset \\K

grep -oP "\baa\s*:\s*'\K[^']+" file

This is what I want

如果我真的在AWK中彎曲它:

BEGIN {
    RS="- -it is not the spoon that bends, it is only yourself"
    FS="(aa : '|'};)"
}
{
    print $2
}

對於多字符RS,使用GNU awk:

$ awk -v RS="aa[[:space:]]*:[[:space:]]*'[^']*'[[:space:]]*}[[:space:]]*;" -F"'" '{$0=RT; print $2; exit}' file
This is what I want

這是使用sed的另一種解決方案:

echo $'var obj = {\naa: \'This is what I want\'\n};
var obj2 = {\naa: \'Unwanted\'\n};' | \
sed -ne $'/aa:/ {N;s/aa: \'\\(.*\\)\'\\n.*/\\1/;T;p;q}'

T;p;q在第一個匹配項上打印替換項並退出,否則繼續下一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM