首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从单独的输入行(从文件或标准输入)格式化bash命令行

从单独的输入行(从文件或标准输入)格式化bash命令行的方法有多种。下面是一种常见的方法:

  1. 首先,读取输入行。如果是从文件中读取,可以使用文件读取函数,如fopenfread。如果是从标准输入读取,可以使用fgets函数。
  2. 对于每一行输入,进行以下处理:
  3. a. 去除行首和行尾的空格和换行符,可以使用字符串处理函数,如trim
  4. b. 检查行是否为空行,如果是则跳过。
  5. c. 检查行是否以注释符号#开头,如果是则跳过。
  6. d. 将行按照空格或制表符进行分割,可以使用字符串处理函数,如strtok
  7. e. 对于每个分割后的单词,进行以下处理:
    • 如果单词以$开头,表示是一个变量,可以使用字符串处理函数,如strstrstrchr,找到变量名,并替换为对应的值。
    • 如果单词以'"开头,表示是一个字符串,可以使用字符串处理函数,如strchr,找到字符串的结束位置,并将整个字符串替换为对应的值。
    • 如果单词以#开头,表示是一个注释,可以将该单词及其后面的内容都忽略。
    • f. 将处理后的单词重新组合成一行命令,可以使用字符串处理函数,如strcatsprintf
  • 输出格式化后的命令行。

下面是一个示例代码,演示如何实现上述步骤:

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LINE_LENGTH 1024

char* trim(char* str) {
    char* end;

    // 去除行尾的空格和换行符
    end = str + strlen(str) - 1;
    while (end > str && (*end == ' ' || *end == '\n')) {
        *end = '\0';
        end--;
    }

    // 去除行首的空格
    while (*str == ' ') {
        str++;
    }

    return str;
}

void formatCommand(char* line) {
    char* token;
    char* command = malloc(MAX_LINE_LENGTH);
    command[0] = '\0';

    // 分割行为单词
    token = strtok(line, " \t");
    while (token != NULL) {
        // 处理变量
        if (token[0] == '$') {
            // 替换为对应的值
            char* value = getenv(token + 1);
            if (value != NULL) {
                strcat(command, value);
            }
        }
        // 处理字符串
        else if (token[0] == '\'' || token[0] == '\"') {
            // 找到字符串的结束位置
            char* end = strchr(token + 1, token[0]);
            if (end != NULL) {
                // 替换为对应的值
                strncat(command, token + 1, end - token - 1);
            }
        }
        // 处理注释
        else if (token[0] == '#') {
            // 忽略注释及其后面的内容
            break;
        }
        // 处理普通单词
        else {
            strcat(command, token);
        }

        strcat(command, " ");
        token = strtok(NULL, " \t");
    }

    printf("%s\n", trim(command));
    free(command);
}

int main() {
    char line[MAX_LINE_LENGTH];

    // 从标准输入读取输入行
    while (fgets(line, sizeof(line), stdin) != NULL) {
        formatCommand(line);
    }

    return 0;
}

这个示例代码可以从标准输入读取输入行,并将格式化后的命令行输出到标准输出。你可以将输入行写入一个文件,然后通过重定向将文件内容作为标准输入,从而实现从文件中读取输入行的功能。

这个方法可以帮助你将输入行中的变量和字符串替换为对应的值,并去除注释和多余的空格,从而得到格式化后的bash命令行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

shell-脚本集合3

main read var; if [ "$var" = "$ip" ];then echo "ok" else echo "no" fi read命令是一个内置命令,用于终端文件读取输入...read命令读取一个输入行,直至遇到换行符。行尾换行符在读入时将被转换成一个空 字符。如果read命令后未跟变量名,读入行将被赋给内置变量REPLY。...也可以用read命令来中断程序运行,直至用户输入一个回车键。要知道如何 有效地使用read命令文件读取输入行,请参见14.6节“循环控制命令”。...表14-1 read命令 格式                含义 read answer       标准输入读取一行并赋值给变量answer read first last   标准输入读取一行...把用户键入第一个词存到变量first中,把该行剩余部分保存到变量last中 read              标准输入读取一行并赋值给内置变量REPLY read –a arrayname 读入一组词

67010

测试开发进阶(四十二)

获取执行上一个指令返回值 0:成功 非0:失败 如何调试shell脚本 ? -x进入跟踪方式,显示所执行每一条命令 查看系统当前进程连接数?.../bin/bash#Author:zhongxinread -p "请输入数字1:" num1read -p "请输入比较符号:" checkread -p "请输入数字2:" num2if test...END处理数据之后执行 内置变量 $0整行内容 $1~$n当前行第1~n个字段 NF当前行字段数 NR当前行号,1开始 FS输入字段分割符,默认为空格tab键 RS输入行分割符,默认为回车符 OFS...输入字段分割符,默认为空格 ORS输入行分割符,默认为回车符 输出以 :分割最后一列内容 $ awk 'BEGIN{FS=":"} {print $NF}' passwd 输出以 :分割 games...s开头行好和第一列内容 $ awk 'BEGIN{FS=":"}/^s/{printf "%d\t%-10s\n" , NR,$1}' passwd 格式化输出第三例大于100内容 $ awk -F

38310

一天一个 Linux 命令(22):xargs 命令

xargs 可以将管道标准输入(stdin)数据转换成命令行参数,也能够文件输出中读取数据。 xargs 也可以将单行多行文本输入转换为其他格式,例如多行变单行,单行变多行。...为默认选项 -a, --arg-file=FILE 指定文件 FILE 中读取输入内容而不是标准输入 -d, --delimiter=DEL 指定 xargs 处理输入内容时分隔符。...每个参数单独传入 xargs 后面的命令 --show-limits 显示操作系统对命令行长度限制 -t, --verbose 先打印命令到标准错误输出,然后再执行 --help 显示帮助信息并退出...四、命令功能 结合其他命令,将标准输入转为命令行参数 五、常见用法 1.将管道左侧标准输入,转为命令行参数hello world,传给第二个echo命令 # echo "hello world"|xargs...4.指定文件中读取输入内容而不是标准输入,然后执行命令 首先,先定义一个文件ip.txt # cat ip.txt www.baidu.com 114.114.114.114 www.qq.com

1.9K20

《Linux命令行与shell脚本编程大全》第十九章 初识sed和gawk

这两个工具能够极大简化需要进行数据处理任务。 19.1 文本处理 能轻松实现自动格式化、插入、修改删除文本元素简单命令行编辑。...流编辑器会在编辑器处理数据之前预先提供一组规则来编辑数据流。 sed根据命令来处理数据流中数据。命令可以从命令行输入,也可以存储在一个命令文本文件中。...3)使用结构化编程概念来为数据处理增加处理逻辑 4)通过提取数据文件数据元素,将其重新排列格式化,生成格式化报告。...gawk程序报告生成能力通常用来大文本文件中提取数据元素,并将它们格式化成可读报告。比如格式化日志文件,找出日志文件错误行。...格式如下: [address]f filename 在读取命令中使用地址区间,只能指定单独一个行号文本模式地址,sed编辑器会将文件文本插入到指定地址后。

1.9K50

Bash程序员,说你呢

也就是说,命令行告诉该指令要输入是一个文件文件来源可以是标准输入,或者是手动指定文件路径。 参数列表最后一个参数,也就可能是路径名文件名。如果省略参数,则视为标准输入读取。...下面是一些示例,明确指定文件来源。 标准输入隐式作为文件 这样,我们就从shuf命令参数中省略了file。根据约定,您可以选择 - 来代替文件,以指示将该文件作为标准输入。...终端输入 执行以下指令, shuf /dev/fd/1 ? /dev/fd/1 其实就是类UNIX系统中标准输入命令行 Enter 之后。会停留在输入窗口。如上图所示,输入任意字符串。...shuf -e {1..3} 输出内容如下, 1 2 3 bash 一些其他玩法, shuf -e $( seq 3 ) 本质上与命令符、管道、重定向,文件内容读取原理是一致。...区间 最后一种方法与前面介绍方法不同。它不需要在命令行中指定文件参数,而是需要一个整数范围。-i 选项强制 shuf 作为 range shuf 操作。

69920

《Linux命令行与shell脚本编程大全》第十四章 处理用户输入

bash shell提供了一些不同方法来用户处获得数据, 包括命令行参数,命令行选项,以及直接键盘读取输入能力。 14.1 命令行参数 就是添加在命令后数据 比如: ..../addem  10  30 10  和  30 就是传递命令行参数 14.1.1 读取参数 bash shell会将一些称为位置参数特殊变量分配给输入命令行所有参数。...方法是:用getopt命令生成格式化版本来替换已有的命令行参数和选项。 用set命令可以做到。需要选项之一就是 双破折号 --。它会将命令行参数替换成set命令命令行值。...为此提供了read命令 14.6.1 基本读取 read命令标准输入另外一个文件描述符中接收输入。收到输入后read将数据放进一个变量中去。...9 else  10         echo "Falied, Two inconsistent"  11 fi 14.6.4 文件中读取 每次调用read命令,它都会文件中读取一行文本。

1.7K50

Linux 命令行艺术

具体地,在命令行输入 man bash 并至少全文浏览一遍; 它理解起来很简单并且不冗长。...而对于图形界面启动 shell 和 cron 启动 shell,则需要单独配置文件。...了解如何使用 tee 将标准输入复制到文件甚至标准输出,例如 ls -al | tee file.txt。 要进行一些复杂计算,比如分组、逆序和一些其他统计分析,可以考虑使用 datamash。...如果你想在 Bash 命令行中写 tab 制表符,按下 ctrl-v [Tab] 键入 $'\t' (后者可能更好,因为你可以复制粘贴它)。 标准源代码对比及合并工具是 diff 和 patch。...cut,paste 和 join:数据修改 fmt:格式化文本段落 pr:将文本格式化成页/列形式 fold:包裹文本中几行 column:将文本格式化成多个对齐、定宽表格 expand 和

4.5K10

一篇文章学习 linux 命令

具体地,在命令行输入 man bash 并至少全文浏览一遍; 它理解起来很简单并且不冗长。...而对于图形界面启动 shell 和 cron 启动 shell,则需要单独配置文件。...了解如何使用 tee 将标准输入复制到文件甚至标准输出,例如 ls -al | tee file.txt。 要进行一些复杂计算,比如分组、逆序和一些其他统计分析,可以考虑使用 datamash。...如果你想在 Bash 命令行中写 tab 制表符,按下 ctrl-v [Tab] 键入 $'\t' (后者可能更好,因为你可以复制粘贴它)。 标准源代码对比及合并工具是 diff 和 patch。...cut,paste 和 join:数据修改 fmt:格式化文本段落 pr:将文本格式化成页/列形式 fold:包裹文本中几行 column:将文本格式化成多个对齐、定宽表格 expand 和

2.2K22

shell学习教程(超详细完整)

二、shell分类 Bash 常用快捷键 输入输出重定向 linux 标准输入与输出 输入重定向 输出重定向 /dev/null 文件 多命令顺序执行 shell脚本执行 三、shell变量 1....换言之,输入重定向就是不使用标准输入端口输入文件,而是使用指定文件作为标准输入设备。...(重定向简单理解就是使用 “<”符来修改标准输入设备) 类型 符号(语法) 功能 标准输入 命令<文件1 命令把文件1内容作为标准输入设备 标识符限定输入 命令<<标识符 命令把标准输入中读入内容,直到遇到...“标识符”分解符为止 输入输出重定向(同时使用) 命令文件2 命令把文件1内容作为标准输入,把文件2作为标准输出。...标准错误输出重定向 错误命令2 > 文件 以覆盖方式,把命令错误输出输出到指定文件设备当中 标准错误输出重定向 错误命令2 >> 文件 以追加方式,把命令错误输出输出到指定文件设备当中 正确输出和错误输出同时保存

5.6K20

C语言 | 每日问答(96)

读者:怎样键盘直接读入字符而不用等 RETURN 键,防止字符 输入回显? 阿一:在C语言里没有一个标准且可移植方法。...在标准中跟本就没有提及屏幕和 键盘概念, 只有基于字符 “流” 简单输入输出。在某个级别, 与键盘交互输入一般上都是由系统取得一行输入才提供给 需要程序。...这给操作系统提供了一个加入行编辑机会,使得系统地操作具一致性, 而不用每一个程序自己建立。 当用户对输入满意, 并键入RETURN后, 输入行才被提供给需要程序。...当程序想在一个字符输入时马上读入, 所用方式途径就采决于行处理在 入流中位置, 以及如何使之失效。 在一些系统下,程序可以使用一套不同修改过操作系统函数来扰过行输入模态。...在另 外一些系统下, 操作系统中负责串行输入部分必须设置为行输入关闭模态, 这样, 所有以后调用常用 输入函数就会立即返回输入字符。

5703430

C语言:文件操作详解

因为在C语言程序启动时候,默认打开了3个流: • stdin - 标准⼊流,在⼤多数环境中键盘⼊,scanf函数就是标准⼊流中读取数据。...//关闭文件 fclose(pf); return 0; } 五、文件顺序读写 顺序读写函数介绍: 上⾯说适⽤于所有⼊流⼀般指适⽤于标准⼊流和其他⼊流(如⽂件⼊流);所有输出流...:可变参数列表 Read formatted data from string:在字符串中读取一个格式化数据        对比一下参数,共同点都是读取一个格式化数据,不同是scanf是默认标准输入流...,键盘上读取,而fscanf是所有的标准输入流都可以,参数可以传文件流也可以跟scanf一样传stdin(标准输入流),而sscanf是从一个字符串中读取。...6.3 总结 scanf:针对标准输入(键盘)格式化输入函数 printf:针对标准输出(屏幕)格式化输出函数 fscanf:针对所有输入格式化输入函数 fprintf:针对所有输出流格式化输入函数

25210

GitHub 60000+ Star 登顶,命令行艺术!

具体地,在命令行输入 man bash 并至少全文浏览一遍; 它理解起来很简单并且不冗长。...而对于图形界面启动 shell 和 cron 启动 shell,则需要单独配置文件。...了解如何使用 tee 将标准输入复制到文件甚至标准输出,例如 ls -al | tee file.txt。 要进行一些复杂计算,比如分组、逆序和一些其他统计分析,可以考虑使用 datamash。...如果你想在 Bash 命令行中写 tab 制表符,按下 ctrl-v [Tab] 键入 $'\t' (后者可能更好,因为你可以复制粘贴它)。 标准源代码对比及合并工具是 diff 和 patch。...格式化文本段落 pr:将文本格式化成页/列形式 fold:包裹文本中几行 column:将文本格式化成多个对齐、定宽表格 expand 和 unexpand:制表符与空格之间转换 nl:添加行号

78410

GitHub 60000+ Star 登顶,命令行艺术!

具体地,在命令行输入 man bash 并至少全文浏览一遍; 它理解起来很简单并且不冗长。...而对于图形界面启动 shell 和 cron 启动 shell,则需要单独配置文件。...了解如何使用 tee 将标准输入复制到文件甚至标准输出,例如 ls -al | tee file.txt。 要进行一些复杂计算,比如分组、逆序和一些其他统计分析,可以考虑使用 datamash。...如果你想在 Bash 命令行中写 tab 制表符,按下 ctrl-v [Tab] 键入 $'\t' (后者可能更好,因为你可以复制粘贴它)。 标准源代码对比及合并工具是 diff 和 patch。...格式化文本段落 pr:将文本格式化成页/列形式 fold:包裹文本中几行 column:将文本格式化成多个对齐、定宽表格 expand 和 unexpand:制表符与空格之间转换 nl:添加行号

74520

G站 50000+ Star 登顶,这份命令行艺术请查收!

具体地,在命令行输入 man bash 并至少全文浏览一遍; 它理解起来很简单并且不冗长。...而对于图形界面启动 shell 和 cron 启动 shell,则需要单独配置文件。...了解如何使用 tee 将标准输入复制到文件甚至标准输出,例如 ls -al | tee file.txt。 要进行一些复杂计算,比如分组、逆序和一些其他统计分析,可以考虑使用 datamash。...如果你想在 Bash 命令行中写 tab 制表符,按下 ctrl-v [Tab] 键入 $'\t' (后者可能更好,因为你可以复制粘贴它)。 标准源代码对比及合并工具是 diff 和 patch。...look:查找以特定字符串开头单词行 cut,paste 和 join:数据修改 fmt:格式化文本段落 pr:将文本格式化成页/列形式 fold:包裹文本中几行 column:将文本格式化成多个对齐

80710

GitHub 60000+ Star 登顶,命令行艺术!

具体地,在命令行输入 man bash 并至少全文浏览一遍; 它理解起来很简单并且不冗长。...而对于图形界面启动 shell 和 cron 启动 shell,则需要单独配置文件。...了解如何使用 tee 将标准输入复制到文件甚至标准输出,例如 ls -al | tee file.txt。 要进行一些复杂计算,比如分组、逆序和一些其他统计分析,可以考虑使用 datamash。...如果你想在 Bash 命令行中写 tab 制表符,按下 ctrl-v [Tab] 键入 $'\t' (后者可能更好,因为你可以复制粘贴它)。 标准源代码对比及合并工具是 diff 和 patch。...cut,paste 和 join:数据修改 fmt:格式化文本段落 pr:将文本格式化成页/列形式 fold:包裹文本中几行 column:将文本格式化成多个对齐、定宽表格 expand 和

90920

命令行艺术

具体地,在命令行输入 man bash 并至少全文浏览一遍; 它理解起来很简单并且不冗长。...而对于图形界面启动 shell 和 cron 启动 shell,则需要单独配置文件。...了解如何使用 tee 将标准输入复制到文件甚至标准输出,例如 ls -al | tee file.txt。 要进行一些复杂计算,比如分组、逆序和一些其他统计分析,可以考虑使用 datamash。...如果你想在 Bash 命令行中写 tab 制表符,按下 ctrl-v [Tab] 键入 $'\t'(后者可能更好,因为你可以复制粘贴它)。 标准源代码对比及合并工具是 diff和 patch。...cut,paste 和 join:数据修改 fmt:格式化文本段落 pr:将文本格式化成页/列形式 fold:包裹文本中几行 column:将文本格式化成多个对齐、定宽表格 expand 和

1K50

命令行艺术 (GitHub 星标 6 万多)

具体地,在命令行输入 man bash 并至少全文浏览一遍; 它理解起来很简单并且不冗长。...而对于图形界面启动 shell 和 cron 启动 shell,则需要单独配置文件。...了解如何使用 tee 将标准输入复制到文件甚至标准输出,例如 ls -al | tee file.txt。 要进行一些复杂计算,比如分组、逆序和一些其他统计分析,可以考虑使用 datamash。...如果你想在 Bash 命令行中写 tab 制表符,按下 ctrl-v [Tab] 键入 $ (后者可能更好,因为你可以复制粘贴它)。 标准源代码对比及合并工具是 diff和 patch。...cut,paste 和 join:数据修改 fmt:格式化文本段落 pr:将文本格式化成页/列形式 fold:包裹文本中几行 column:将文本格式化成多个对齐、定宽表格 expand 和

70121

命令行艺术 (GitHub 星标 6 万多)

具体地,在命令行输入 man bash 并至少全文浏览一遍; 它理解起来很简单并且不冗长。...而对于图形界面启动 shell 和 cron 启动 shell,则需要单独配置文件。...了解如何使用 tee 将标准输入复制到文件甚至标准输出,例如 ls -al | tee file.txt。 要进行一些复杂计算,比如分组、逆序和一些其他统计分析,可以考虑使用 datamash。...如果你想在 Bash 命令行中写 tab 制表符,按下 ctrl-v [Tab] 键入 $' '(后者可能更好,因为你可以复制粘贴它)。 标准源代码对比及合并工具是 diff和 patch。...cut,paste 和 join:数据修改 fmt:格式化文本段落 pr:将文本格式化成页/列形式 fold:包裹文本中几行 column:将文本格式化成多个对齐、定宽表格 expand 和

1.6K62

命令行艺术

具体地,在命令行输入 man bash 并至少全文浏览一遍; 它理解起来很简单并且不冗长。...而对于图形界面启动 shell 和 cron 启动 shell,则需要单独配置文件。...了解如何使用 tee 将标准输入复制到文件甚至标准输出,例如 ls -al | tee file.txt。 要进行一些复杂计算,比如分组、逆序和一些其他统计分析,可以考虑使用 datamash。...如果你想在 Bash 命令行中写 tab 制表符,按下 ctrl-v [Tab] 键入 $\' \'(后者可能更好,因为你可以复制粘贴它)。 标准源代码对比及合并工具是 diff和 patch。...cut,paste 和 join:数据修改 fmt:格式化文本段落 pr:将文本格式化成页/列形式 fold:包裹文本中几行 column:将文本格式化成多个对齐、定宽表格 expand 和

92121
领券