如何编写Bash条件语句处理文本中以反斜杠开头的行?
实现处理文本行的Bash脚本条件逻辑
我来帮你搞定这个Bash脚本的需求,结合你描述的逻辑,我整理了一套完整且健壮的实现方案,咱们一步步拆解来看:
核心思路
- 先执行指定的
shasum命令,把哈希结果追加到file_B.txt - 逐行读取
file_B.txt,同时匹配file_C.txt的对应行 - 根据
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
相关产品推荐
相关产品推荐

