如何在比赛后打印所有内容

  • 本文关键字:打印 linux bash awk
  • 更新时间 :
  • 英文 :


比赛后如何打印所有内容?

我尝试了以下内容,它只是打印变量"$source":

awk "IGNORECASE = 1;f;/some_word</div>/{f=1}" <<< "$source"

例如,源包含:

<code>
<code>
MATCH
<code>
<code>
<code>

我想得到:

<code>
<code>
<code>

你很接近。请记住,awk 脚本具有以下语法:

<condition> { <action> }

默认条件为 true,默认操作为打印当前记录。当你写:

IGNORECASE = 1;f;/some_word</div>/{f=1}

这与:

IGNORECASE = 1
f
/some_word</div>/ { f=1 }

当您添加默认操作时

,它与:
IGNORECASE = 1 { print $0 }
f { print $0 }
/some_word</div>/ { f=1 }

请注意,您已将 IGNORECASE=1 语句放在条件部分而不是操作部分中,因此它的计算结果始终为 true,因此将始终打印当前行。

你真正想要的是在脚本的开头设置忽略大小写:

BEGIN { IGNORECASE = 1 }
f { print $0 }
/some_word</div>/ { f=1 }

可以在原始的单行语法中简化为:

BEGIN{IGNORECASE = 1} f; /some_word</div>/ {f=1}

整个脚本是(使用单引号,而不是双引号以避免外壳引用/逃离地狱):

awk 'BEGIN{IGNORECASE = 1} f; /some_word</div>/ {f=1}' <<< "$source"

但请注意,IGNORECASE是GNU-awk特有的,可以在所有awk上移植:

awk 'f; tolower($0) ~ /some_word</div>/ {f=1}' <<< "$source"

这是修复程序。

awk "BEGIN{IGNORECASE=1}f;/some_word</div>/{f=1}" <<< "$source"

(虽然你在问题中提到了awk,但我最近不得不想办法做到这一点,所以这里是)perl替代方案:

cat file.txt | perl -n -i -e '$should_print = 1 if /MATCH/; print $_ if $should_print'

相关内容

  • 没有找到相关文章

最新更新