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

使用Sed修改字符串:移除xxd输出指定内容的问题求助

解决xxd输出中移除末尾可变文本的问题

看起来你在处理xxd -bi的输出时遇到了两个小问题:一是条件判断的语法错误,二是没法精准移除末尾的原字符串文本。我来帮你修正脚本,同时优化整个处理流程。

先说说现有脚本的几个问题

  1. 条件判断里误用了管道符|代替逻辑或||,这会导致语法错误,无法正确识别输入的大小写变体。
  2. 第二个sed命令的写法完全不对:单引号里的变量$convertthis不会被解析,而且你试图匹配的末尾文本是可变的,其实不需要硬匹配原字符串,只要匹配格式特征就行——xxd -bi的输出是地址: 二进制组 原字符串,所以末尾部分是第一个空格之后的所有内容。
  3. 用$(sed ...)包裹sed命令是多余的,这会把sed的输出当作系统命令执行,完全没必要。

修改后的完整脚本

echo "What you want to input numbers or string?"
read input
# 统一转成小写,简化条件判断逻辑
input_lower=$(echo "$input" | tr '[:upper:]' '[:lower:]')

if [[ "$input_lower" == "number" ]]; then
    echo "Number selected 1"
elif [[ "$input_lower" == "string" ]]; then
    echo "String selected"
    echo "Please give me the string to be XOR'ed"
    read convertthis
    # 直接通过管道链式处理,避免临时文件的冗余修改
    echo "$convertthis" | xxd -bi | sed -e 's/^00000000://' -e 's/ .*$//' > bin-store
else
    echo "Please re-run the script, input is wrong"
fi

关键修改点说明

  • 简化条件判断:把输入统一转成小写,只需要一次判断就能覆盖所有大小写输入的情况,代码更简洁。
  • 精准的sed替换:
    • 第一个替换s/^00000000://:匹配行首的地址前缀并移除,确保只删除开头的固定地址。
    • 第二个替换s/ .*$//:匹配第一个空格之后的所有内容(包括空格本身)并删除,不管末尾的原字符串是什么,都能精准去掉。
  • 高效的管道处理:直接把echo、xxd、sed通过管道连起来,处理完成后直接写入文件,省去了先写文件再修改的冗余步骤。

如果你的输入字符串很长,xxd输出会有多行,这个脚本也能正常处理,因为sed会逐行处理每一行的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:36:11