我正在使用大变量,并且要加快我想在不使用 echo/printf
awk
或 grep
的脚本我尝试了什么:
awk "/test/ {for(i=1; i<=100; i++) {getline; print}}" "$var"
awk: fatal: cannot open file `<<$var content>>' for reading (No such file or directory)
grep -A 100 test "$var"
grep: `<<$var content>>': No such file or directory
在bash中,您可以使用单行Heredoc从变量重定向到Stdin:
awk "/test/ {for(i=1; i<=100; i++) {getline; print}}" <<< "$var"
如果我了解您,则在Shell变量var
中存储了一个多行字符串,并且您想从该字符串包含该字符串中包含test
的行中打印100行。gnu尴尬是:
$ awk -v var="$var" 'BEGIN{ printf "%s", gensub(/.*(test([^n]*n){100}).*/,"\1","",var) }'
例如。要打印"测试"加上2或3行,包括:
$ echo "$var"
abc
def
test
ghi
klm
nop
$ awk -v var="$var" 'BEGIN{ printf "%s", gensub(/.*(test([^n]*n){2}).*/,"\1","",var) }'
test
ghi
$ awk -v var="$var" 'BEGIN{ printf "%s", gensub(/.*(test([^n]*n){3}).*/,"\1","",var) }'
test
ghi
klm
对于其他尴尬,您可以使用Match() substr()获得相同的结果。