有一个 Zsh 变量,其内容如下:
$if(description-meta)$
<meta name="description" content="$description-meta$" />
$endif$
<title>$if(title-prefix)$$title-prefix$ – $endif$$pagetitle$</title>
<style>
$styles.html()$
</style>
$for(css)$
<link rel="stylesheet" href="$css$" />
$endfor$
我需要删除 <title>
这一行,即:
<title>$if(title-prefix)$$title-prefix$ – $endif$$pagetitle$</title>
并覆盖该变量或创建一个新变量,使其变为:
$if(description-meta)$
<meta name="description" content="$description-meta$" />
$endif$
<style>
$styles.html()$
</style>
$for(css)$
<link rel="stylesheet" href="$css$" />
$endfor$
如何使用 awk
或 sed
来实现?
会从变量
$var
的内容中移除包含
的行(注意,如果存在尾随的换行符,也会被移除)。或者,你可以使用ksh风格的
``` set -o extendedglob var=${var//[^$'\n']#${var//pattern[/replacement]}
操作符,如下所示:这将移除所有出现
的地方,以及它之前或之后的所有非换行字符,还有一个可选的换行符,达到相同的效果,而且不需要将数据通过一个单独进程中的grep
命令来处理(并避免了换行符被剥离的问题)。另见:
``` var=${(F)"${(f@)var}":#*其中
"${(f@)var}"
按行f
eeds分割$var
(在引号内使用@
以保留空元素),f
是ps[\n]
的简写。${(F)array:#**}
移除包含
的结果元素,并将它们用行F
eeds重新连接起来,F
是pj[\n]
的简写。