Shell脚本中sed语句"${sta}~${stp}!d"的作用是什么?
sed 表达式
${sta}~${stp}!d 功能说明 上下文前提
你贴的代码中,前序的grep命令加了--null参数,输出的匹配文件名以空字符(\0)作为分隔符,后续sed加了-z参数,就是指定以空字符作为行分隔符处理输入,此时sed处理的每一个“行”就对应一个匹配到的文件名,不会因为文件名包含空格、换行等特殊字符出现解析错误。
表达式拆解
这个是GNU sed特有的地址匹配语法,拆分来看:
${sta}是预先定义的起始行号变量,${stp}是步长变量first~step是GNU sed的行选择规则:从第first行开始,每隔step行选中一行!d的含义是:没有被前面的行规则选中的行,全部执行删除操作
组合起来的效果就是:仅保留从第${sta}行开始,每隔${stp}行的内容,其余内容全部删除。
示例
如果sta=2、stp=3,最终只会保留第2、5、8、11……行对应的文件名,其余匹配到的文件都会被过滤掉。这种写法通常用来把搜索到的文件按固定步长拆分,多用于多进程并行处理文件的场景。
内容的提问来源于stack exchange,提问作者Dilna
相关产品推荐
相关产品推荐

