[PATCH 1/2] sed: implement (GNU extension) 'z' command.

Csókás Bence csokas.bence at prolan.hu
Wed Mar 5 12:19:14 UTC 2025


Hi,

On 2025. 03. 05. 5:52, Jeremy Drake wrote:
> This 'z'aps (empties) the pattern space, without starting a new cycle
> like 'd' does.
> 
> Signed-off-by: Jeremy Drake <busybox at jdrake.com>
> ---
>   editors/sed.c | 9 +++++++--
>   1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/editors/sed.c b/editors/sed.c
> index 6179c5e80..de411fbf4 100644
> --- a/editors/sed.c
> +++ b/editors/sed.c
> @@ -531,7 +531,7 @@ static int parse_subst_cmd(sed_cmd_t *sed_cmd, const char *substr)
>    */
>   static const char *parse_cmd_args(sed_cmd_t *sed_cmd, const char *cmdstr)
>   {
> -	static const char cmd_letters[] ALIGN1 = "saicrw:btTydDgGhHlnNpPqx={}";
> +	static const char cmd_letters[] ALIGN1 = "saicrw:btTydDgGhHlnNpPqxz={}";
>   	enum {
>   		IDX_s = 0,
>   		IDX_a,
> @@ -557,6 +557,7 @@ static const char *parse_cmd_args(sed_cmd_t *sed_cmd, const char *cmdstr)
>   		IDX_P,
>   		IDX_q,
>   		IDX_x,
> +		IDX_z,
>   		IDX_equal,
>   		IDX_lbrace,
>   		IDX_rbrace,
> @@ -639,7 +640,7 @@ static const char *parse_cmd_args(sed_cmd_t *sed_cmd, const char *cmdstr)
>   	/* if it wasn't a single-letter command that takes no arguments
>   	 * then it must be an invalid command.
>   	 */
> -	else if (idx >= IDX_nul) { /* not d,D,g,G,h,H,l,n,N,p,P,q,x,=,{,} */
> +	else if (idx >= IDX_nul) { /* not d,D,g,G,h,H,l,n,N,p,P,q,x,z,=,{,} */

Please remove this inline comment. The above block comment already 
addresses this case much better. And otherwise we'll just be stuck 
editing this whenever a new flag is added.

>   		bb_error_msg_and_die("unsupported command %c", sed_cmd->cmd);
>   	}
> 
> @@ -1485,6 +1486,10 @@ static void process_files(void)
>   			G.hold_space = tmp;
>   			break;
>   		}
> +		case 'z': /* Zap pattern space */
> +			free(pattern_space);
> +			pattern_space = xzalloc(1);
> +			break;
>   		} /* switch */
>   	} /* for each cmd */
> 

Bence



More information about the busybox mailing list