首页
学习
活动
专区
工具
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命令行。

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

相关·内容

sed & awk 第二版学习(一)—— sed 与 awk 基本操作

如果想用输出文件取代输入文件,可以采用 mv 命令并将它作为单独的步骤来处理,但首先要确保编辑的脚本是正确的!更简单的做法是使用 -i 选项直接修改输入文件,但建议先将输入文件做备份。 4....下面汇总了三个 sed 的常用命令行选项: -e:执行随后的指令。 -f:后跟脚本的文件名。 -n:阻止输入行的自动输出。...二、使用 awk 与 sed 相似,awk 为每个输入行执行一套指令。可以在命令行上指定指令或创建脚本文件。 1....运行 awk 命令行的语法是: awk 'instructions' files 每次从一个或多个文件中读入一行,或从标准输入中读入一行。...可以用与 sed 相同的方式输入多个指令:用分号分隔或使用 bash 的多行输入功能。 awk 程序通常被放置在可以对它们进行测试和修改的文件中。

13510

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 读入一组词

68510
  • 测试开发进阶(四十二)

    获取执行上一个指令的返回值 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

    40410

    一天一个 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

    2.2K20

    《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 操作。

    76520

    《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.8K50

    【C语言】文件操作详解 - 从打开到关闭

    流可以是输入流(Input Stream)或输出流(Output Stream),分别用于从某个源读取数据和向某个目标写入数据。 C程序针对文件、画面、键盘等的数据输入输出操作都是通过流操作的。...一般情况下,我们要想向流里写数据,或者从流中读取数据,都是要打开流,然后操作。 5.1.2 标准流 那为什么我们从键盘输⼊数据,向屏幕上输出数据,并没有打开流呢?...那是因为C语言程序在启动的时候,默认打开了3个流: • stdin: 标准输入流,在大多数的环境中从键盘输入,scanf函数就是从标准输⼊流中读取数据。...0; } 6.2 对比一组函数 scanf/printf:针对标准输入流/标准输出流的 格式化 输入/输出函数 fscanf/fprintf:针对所有输入流/所有输出流的 格式化 输入/输出函数...sscanf/sprintf:将格式化的数据转化成字符串/从字符串中提取格式化数据 sprinft: 从字符串中提取格式化的数据(将字符串转化为格式化数据) sscanf: 将格式化的数据写到字符串中

    9710

    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的内容作为标准输入设备 标识符限定输入 命令标准输入中读入内容,直到遇到...“标识符”分解符为止 输入输出重定向(同时使用) 命令文件1 >文件2 命令把文件1的内容作为标准输入,把文件2作为标准输出。...标准错误输出重定向 错误命令2 > 文件 以覆盖方式,把命令的错误输出输出到指定的文件或设备当中 标准错误输出重定向 错误命令2 >> 文件 以追加方式,把命令的错误输出输出到指定的文件或设备当中 正确输出和错误输出同时保存

    6.4K21

    C语言 | 每日问答(96)

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

    5863430

    Linux 命令:每日一学,参数传递之xargs命令实践

    脚本中常用的参数替换 xargs 命令进行实践学习,从而实现更加强大的参数传递和多进程并行执行Linux命令或脚本等 0x02 参数替换 xargs 命令 - 将标准输入中的数据转换为命令行参数 描述...由于很多命令不支持|管道来传递参数,此时就需要 xargs 命令的帮助,它可以读入stdin 的数据,并将格式化(空格符、回车符进行分隔)后的数据作为命令的参数,还可以将单行或多行文本输入转换为其他格式...工具功能: 将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。 将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。...-a FILE # 指定一个参数文件,而不是从标准输入中读取。...-n NUM # 指定每行显示多少NUM列; -L num # 从标准输入一次读取 num 行送给 command 命令。

    44110

    sed & awk 第二版学习(三)—— 编写 sed 脚本

    原始的输入文件未被改变,编辑命令修改原始行的备份并将修改后的备份发送到标准输出。 一、在脚本中应用命令 一次一行的设计的一个优点是 sed 比交互式屏幕编辑程序更适合处理大文件。...后者必须将整个文件(或大部分)读入内存,这可能产生内存溢出或处理大文件时速度非常慢。sed 首先将整个编辑脚本应用于第一个输入行,然后再读取第二个输入行并对其应用整个脚本。...sed 维护一种模式空间,即一个工作区或临时缓冲区,当应用编辑命令时将在那里存储单个输入行。当应用了所有的指令后,当前行被输出并且输入的下一行被读入模式空间。...二、寻址上的全局透明 sed 是隐式全局的,即缺省将命令应用于每个输入行。行地址用于提供操作(或限制)的上下文环境。sed 命令可以指定零个、一个或两个地址。...提取文件内容 sed 应用程序的一种典型的用法是从文件中提取相关的材料,这一功能类似于 grep,而且它具有在输出之前修改输入的又一优点。

    7710

    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:针对所有输出流的格式化输入函数

    56610

    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:添加行号

    76920

    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:添加行号

    81610

    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:将文本格式化成多个对齐

    85410

    命令行的艺术

    具体地,在命令行中输入 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 和

    72821
    领券