You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Bash多命令管道脚本转Python及sed命令含义咨询

Bash脚本转Python及sed命令解析

先纠正你对sed "/[a-zA-Z0-9]$/!d"的误解

这个sed命令不是删除以字母数字开头的行,而是只保留以字母(a-z/A-Z)或数字(0-9)结尾的行,其余所有行都会被删掉。具体逻辑:

  • /[a-zA-Z0-9]$/ 是匹配规则:$代表行尾,整个模式匹配行最后一个字符是字母或数字的行
  • !d 是执行动作:!表示取反,d是删除,合起来就是“不匹配上述规则的行全部删除”

原Bash脚本的完整逻辑

example=$(echo $var | cut -c 40- | sed "/[a-zA-Z0-9]$/!d") 一步步做了这些事:

  1. 输出变量var的内容(如果是多行就按行输出)
  2. 对每一行,截取从第40个字符开始到行尾的部分(Bash里cut -c 40-的字符计数是从1开始的)
  3. 过滤掉所有不以字母/数字结尾的行,把剩下的内容赋值给example

对应的Python实现

注意:Python的字符串索引是从0开始的,所以Bash里的第40个字符对应Python的索引39;另外要考虑多行文本的场景:

处理多行文本的版本

# 假设var是原始的输入字符串(可能包含多行)
lines = var.splitlines()
filtered = []
for line in lines:
    # 截取第40个字符及之后的内容,长度不够40就取空字符串
    truncated = line[39:] if len(line) >= 40 else ""
    # 过滤:只有非空且最后一个字符是字母/数字的行才保留
    if truncated and truncated[-1].isalnum():
        filtered.append(truncated)
# 把过滤后的行用换行符连接,得到最终的example
example = "\n".join(filtered)

处理单行文本的简化版本

# 假设var是单行字符串
truncated = var[39:] if len(var) >= 40 else ""
# 符合条件就保留,否则为空
example = truncated if (truncated and truncated[-1].isalnum()) else ""

内容的提问来源于stack exchange,提问作者answer007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:40:31