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

如何解析命令行变量?如何用Bash脚本提取文本指定内容?

我来帮你解决这两个命令行相关的问题,都是日常Shell操作里很实用的技巧:

1. 命令行中解析变量的常见方式

在Bash(或类Unix Shell)环境下,变量解析是基础操作,不同场景有不同的用法:

  • 基础变量引用:用$变量名或${变量名}来解析变量,后者在变量名和后续字符连在一起时必须使用,避免混淆:
    username="John"
    echo "Welcome, $username"  # 输出 Welcome, John
    echo "Welcome, ${username}Doe"  # 输出 Welcome, JohnDoe(不用{}的话会解析$usernameDoe,大概率为空)
    
  • 引号对变量解析的影响:双引号会解析变量内容,单引号会原样输出变量名,这点一定要注意:
    echo 'Hello, $username'  # 输出 Hello, $username
    echo "Hello, $username"  # 输出 Hello, John
    
  • 命令行参数变量:如果是写Shell脚本,$1、$2对应脚本接收的第一个、第二个参数,$@代表所有传入的参数:
    # 比如脚本名为greet.sh
    echo "你传入的第一个参数是:$1"
    echo "所有参数列表:$@"
    # 运行 ./greet.sh Alice Bob 的输出:
    # 你传入的第一个参数是:Alice
    # 所有参数列表:Alice Bob
    
  • 特殊内置变量:Shell还有一些内置的特殊变量,比如$?是上一条命令的执行状态码(0表示成功),$$是当前进程ID,直接引用就能解析它们的值。
2. 使用Bash命令行处理文本文件(跳过前14行和最后2行)

确实不用写Java/Python脚本,用Shell自带的工具就能快速搞定,这里给你三种实用方法,按需选择:

方法1:结合head和tail(直观易懂)

先计算文件的总行数,再通过tail跳过前14行,head截取掉最后2行:

total_lines=$(wc -l < input.txt)
tail -n +15 input.txt | head -n $((total_lines - 14 - 2)) > output.txt

解释:tail -n +15表示从第15行开始输出(跳过前14行),$((total_lines - 16))计算出需要保留的行数(总行数减去前14行和后2行),最后用>把结果写入新文件output.txt。

方法2:用sed命令(简洁)

如果你的系统sed版本支持行号偏移,可以直接用一行命令搞定:

sed '1,14d; $-1,$d' input.txt > output.txt

解释:1,14d删除前14行,$-1,$d删除倒数第1行和倒数第2行。如果某些sed版本不支持$-1,可以拆成两步:

sed '1,14d' input.txt | sed '$d' | sed '$d' > output.txt

先删前14行,再连续删两次最后一行,效果一样。

方法3:用awk(最通用,适合大文件)

awk处理文本更灵活,尤其是大文件时可以不用加载全部内容到内存:

awk '{
    if (NR > 14) {
        # 保存最近两行,输出更前面的一行
        print prev_line
        prev_line = current_line
        current_line = $0
    }
} END {
    # 最后输出倒数第三行
    print prev_line
}' input.txt > output.txt

这个方法只保留最近的两行内容,当行数超过14后,每次输出前一行,最后在结束时输出倒数第三行,自动跳过了最后2行,内存占用极低,适合处理超大文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:36:56