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

如何编写Bash条件语句处理文本中以反斜杠开头的行?

实现处理文本行的Bash脚本条件逻辑

我来帮你搞定这个Bash脚本的需求,结合你描述的逻辑,我整理了一套完整且健壮的实现方案,咱们一步步拆解来看:

核心思路

  1. 先执行指定的shasum命令,把哈希结果追加到file_B.txt
  2. 逐行读取file_B.txt,同时匹配file_C.txt的对应行
  3. 根据file_B.txt的行是否以反斜杠(\)开头,对file_C.txt的对应行执行不同的sed格式化操作

完整脚本代码

#!/bin/bash

# 执行shasum命令,将结果追加到file_B.txt(注意路径中的转义符,可根据实际调整)
shasum -a 256 file_A\\\\//.txt >> file_B.txt

# 初始化行号计数器,用于匹配file_C.txt的对应行
line_num=1

# 清空目标文件(避免多次运行时内容重复)
> file_C_modified.txt

# 逐行读取file_B.txt
while IFS= read -r line; do
    # 提取file_C.txt中当前行号对应的内容
    c_line=$(sed -n "${line_num}p" file_C.txt)
    
    # 处理file_C行数不足的情况
    if [[ -z "$c_line" ]]; then
        echo "⚠️  Warning: file_C.txt 没有第 $line_num 行,跳过处理..." >&2
        ((line_num++))
        continue
    fi
    
    # 判断当前行是否以反斜杠开头
    if [[ "$line" == '\'* ]]; then
        # 给行开头添加^.{65} ,结尾添加$
        echo "$c_line" | sed 's/^/^.{65} /; s/$/$/' >> file_C_modified.txt
    else
        # 给行开头添加^.{64} ,结尾添加$
        echo "$c_line" | sed 's/^/^.{64} /; s/$/$/' >> file_C_modified.txt
    fi
    
    # 行号自增,处理下一行
    ((line_num++))
done < file_B.txt

# 可选:如果需要直接替换原file_C.txt,取消下面的注释(建议先备份原文件)
# mv file_C_modified.txt file_C.txt

关键细节说明

  • 安全读取行:用IFS= read -r line避免行首/行尾空格丢失,同时防止反斜杠被当成转义符处理
  • 行号匹配:通过sed -n "${line_num}p"精准定位file_C.txt的对应行,确保两行严格对应
  • 反斜杠判断:[[ "$line" == '\'* ]]中,单引号包裹的反斜杠是字面量,*匹配后续任意字符,准确识别以反斜杠开头的行
  • 健壮性处理:添加了行数不足的警告,避免脚本因文件行数不匹配而报错
  • 路径注意:你给出的file_A\\\\//.txt看起来是转义后的路径,如果实际路径是file_A/.txt或其他形式,直接修改这个路径即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:05:52