首页
学习
活动
专区
圈层
工具
发布

在shell程序里如何从文件中获取第n行

我一直在使用 head -n | tail -1,它可以做到这一点,但我一直想知道是否有一个Bash工具,专门从文件中提取一行(或一段行)。 所谓“规范”,我指的是一个主要功能就是这样做的程序。...答: 有一个可供测试的文件,内容如下: 使用 sed 命令,要打印第 20 行,可写为 sed -n '20'p file.txt sed -n '20p' file.txt 测试截图如下: 要打印第...8 到第 12 行,则可用命令 sed -n '8,12'p file.txt 如果要打印第8、9行和第12行,可用命令 sed -n '8p;9p;12p' file.txt 对于行数特大的文件...,为了提高处理速度,可采用类似如下命令 sed '5000000q;d' file.txt tail -n+5000000 file.txt | head -1 需要关注处理性能的伙伴可以在上述命令前加上...其他可实现相同效果的命令工具还有 cut, awk, perl 等: cut -f23 -d$'\n' file.txt awk 'NR == 23 {print; exit}' file.txt perl

5.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【趣学C语言和数据结构100例】11-15

    (因为数组最后一位为空),检查当前元素是否大于输入的数 num,如果大于,则将当前元素向后移动一位( array[i+1] = array[i];)。...15.魔方阵分析:每一行、每一列和对角线之和均相等。会得到以下规律。(1).将1放在第1行的中间一列。...(3).如果上一行的行数为1,则下一个数的行数为n(指最下一行)(4).当上一个数的列数为n时,下一个数的列数应该为1。(5).如果按上面规律确定的位置有数,则把下一个数放在上一个数的下面。...所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。要求输出 1~n2的自然数构成的魔方阵。//步骤: //1.将1放在第1行的中间一列。...//3.如果上一行的行数为1,则下一个数的行数为n(指最下一行)//4.当上一个数的列数为n时,下一个数的列数应该为1。//5.如果按上面规律确定的位置有数,则把下一个数放在上一个数的下面。

    54710

    Linux 流编辑器 sed 详解

    使用 s 命令时,sed 编辑器会在一行一行地读取文件 file,并在每行查找文本 srcStr,如果找到了,则将该处的 srcStr 替换为 dstStr。...# 将第2到5行中所有的 bin 替换成 BIN sed '10,$ s/bin/BIN/g' /etc/passwd  # 将第10行到最后一行中所有的 bin 替换成 BIN 注:行寻址不止对替换命令有效...passwd    # 删除第2到最后一行 五、使用 sed 命令插入和附加文本 sed 编辑器使用 i 命令来向数据流中插入文本行,使用 a 命令来向数据流中附加文本行。.../passwd      # 在数据流的最后一行后面增加一个新行 六、使用 sed 命令修改行 使用命令 c 可以将数据流中的整行文本修改为新的行,与插入、附加操作一样,这要求在 sed 命令中指定新的行...root 的行的内容修改为 \ 后面的内容 sed '2,4c\New text' /etc/passwd     # 将第2到4行的内容修改为 \ 后面的内容,但是不是逐行修改,而是会将这之间的

    2.1K10

    sed的用法详解

    ‘/^id/p’ /etc/inittab 列出以id开头的行 常见的命令选项 -n:屏蔽默认输出(全部文本) -i:直接修改文件内容 -f:使用sed脚本 -e:可以指定多个处理动作 -r:启用扩展的正则表达式...d’ a.txt 删除所有不包含xml的行 sed '/^install/d' a.txt 删除所有以 sed '$d' a.txt删除最后一行 sed '/^$/d' a.txt删除所有空行 sed...‘YY’ 4,7iYY 在第4-7行的每一行前添加文本 a 行后插入文本:2aYY 在第2行之后添加文本 /^XX/aYY 在以XX开头的行之后添加文本 c 替换当前行:2cYY 将第2行的内容修改为YY...p' /etc/passwd n读下一行,读取下一行进行处理 sed -n 'p;n' reg.txt 读取奇数行 sed -n 'n;p' red.txt 读取偶数行 sed综合脚本示例 根据/etc...a[$0]++' filename a为数组名 $0为处理对象 表示要去除的是整行重复的内容,如果要去除的是字段重复的行,可以将$0改为$1 $2 提取测试文件:awk -F: '' /etc/passwd

    5.3K31

    算法基础篇:(三)基础算法之枚举:暴力美学的艺术,从穷举到高效优化

    输入: 第一行:整数 n(地毯数量); 接下来 n 行:第 i+1 行包含 4 个整数 a_i, b_i, g_i, k_i(第 i 张地毯的左下角坐标和长度); 最后一行:两个整数 x, y(目标点坐标...-1] - a [i-2]); 合法性验证:推导的 a [i] 必须是 0 或 1,且最后一行的状态需满足 b [n] = a [n-1] + a [n](第二列最后一行的数字由第一列最后两行的地雷数量决定...3.3.3 解题思路详解 (1) 核心步骤 枚举对象:第一行的所有可能状态(用二进制数表示,第 j 位为 1 表示第一行第 j 列最终状态为 1); 枚举范围:二进制数从 0 到 (1n)-1(共...:推导完成后,检查最后一行是否满足偶数矩阵要求(避免因推导公式的边界处理遗漏问题)。...(4) 最后一行未验证 问题:推导完成后未检查最后一行是否满足偶数矩阵要求,导致部分非法方案被误判为合法; 解决:额外遍历最后一行,计算每个元素的相邻元素之和,确保为偶数。

    76010

    力扣73——矩阵置零

    原题 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。...用一个数字 首先我想到的是用一个数字进行表示,用二进制表示,一共m + n位,其中前m位表示行,后n位表示列,矩阵中哪个数字为0,则其行列所在位的数字为1,也就是加上相应的二进制数。...就是利用矩阵的第一行和第一列来记录需要置零的行和列,至于第一行和第一列是否需要置零,则可以单独拿两个 boolean 对象来表示。...利用矩阵本身 优化 首先,需要第一行和第一列都判断一遍的吗?可以只判断其中一个即可,比如只判断第一列是否需要置零,那么第一行是否需要置零就可以依赖matrix[0][0]了。...,因为如果从前往后,第一行如果因为第一列置为0,会对之后结果误导 for (int i = row - 1; i >= 0; i--) { // 第一列不动

    56130

    leetcode 121. 买卖股票的最佳时机---九种解法

    那么我们其实可以用一个循环来计算出最大的利润,我们只需要依次对于每个节点做以下两个判断: 判断当前节点是不是相对最低价,如果是,则将它设置为最低价(也就是买入); 如果当前节点不是最低价,那我们就将它卖出...,然后计算卖出的收益(当前节点减去相对最低价), 如果卖出的收益大于目前的最高收益,则将此值设置为最高收益。...,即最后我们手上有多少钱,因为初始钱为0 } }; 复杂度分析: 时间复杂度:O(N),遍历股价数组可以得到最优解; 空间复杂度:O(N),状态数组的长度为 N。...7.对状态转移方程的空间优化 状态转移方程里下标为 i 的行只参考下标为 i - 1 的行(即只参考上一行),并且: 下标为 i 的行并且状态为 0 的行参考了上一行状态为 0 和 1 的行; 下标为...i 的行并且状态为 1 的行只参考了上一行状态为 1的行。

    1.1K20

    less(1) command

    该选项使得向前搜索从屏幕末行的下一行开始,向后搜索从当前屏幕首行的前一行开始,即跳过屏幕内容。...比如 +G 表示跳转至文件末尾,+/XYZ 表示跳转至匹配 XYZ 的第一行,+NUM 表示从文件第 NUM 行开始显示;如果选项以 ++ 开头,则初始命令将应用于所查看的每个文件,而不仅仅是第一个文件...在检查新文件时,将保留标记,因此 ' 命令可用于在输入文件之间切换 ^X^X 等于 ' 命令 /PATTERN 向前搜索包含指定模式的第 N 行,N 默认为 1。从屏幕首行开始搜索。...PATTERN 向后搜索包含模式的第 N 行,N 默认为 1。从屏幕首行的前一行开始搜索。在 PATTERN 前输入指定特殊字符可以控制搜索的行为。主要有: ^N 或 !...如果搜索到达当前文件的开头,但没有找到匹配项,那么搜索将继续在命令行列表中的前一个文件中进行 ^F 或 @ 从命令行列表中最后一个文件的最后一行开始搜索,不管当前屏幕上显示的是什么,也不管 -a 或

    2.3K30

    Linux Shell工具篇 - 内容处理工具sed

    从第一行开始删除,每隔2行就删掉一行: sed '1~2d' sed.txt # 1~2 从第1行开始, 每隔2行删除 运行效果 2.3 删除指定范围的多行数据 删除从第1行到第3行的数据:...sed '1,3d' sed.txt # 1,3 从指定第1行开始到第3行结束 运行效果 2.4 删除指定范围取反的多行数据 删除从第1行到第3行取反的数据: sed '1,3!...从指定第1行开始到第3行结束取反, 就是除了第1行到第3行,其他行都删除 运行效果 2.5 删除最后一行 sed '$d' sed.txt 运行效果 2.6 删除匹配字符串的行 sed '/itheima...取反 运行效果 3.更改文件中的数据 3.1 将文件的第一行修改为hello sed '1chello' sed.txt 运行效果 3.2 将包含指定字符串的行修改为hello sed '/itheima...将模式空间第一行复制到暂存空间(覆盖方式),最后将暂存空间的内容复制到模式空间中替换从第2行开始到最后一行的每一行数据(覆盖方式) sed '1h;2,$g' sed.txt 运行命令 6.4 将前三行数据数据复制粘贴到最后一行

    2.5K20

    Linux 命令(89)—— less 命令

    该选项使得向前搜索从屏幕末行的下一行开始,向后搜索从当前屏幕首行的前一行开始,即跳过屏幕内容。...该选项必须是 LESS 变量的最后一个选项,或者以美元符号终止。比如 -Ps 后面跟一个字符串会将默认(简短)提示符更改为该字符串。-Pm 改变选项 -m 的提示。-PM 更改 -M 的提示。...比如 +G 表示跳转至文件末尾,+/XYZ 表示跳转至匹配 XYZ 的第一行,+NUM 表示从文件第 NUM 行开始显示;如果选项以 ++ 开头,则初始命令将应用于所查看的每个文件,而不仅仅是第一个文件...PATTERN 在文件中向后搜索包含模式的第 N 行,N 默认为 1。搜索从紧接顶部一行之前的那一行开始。在 PATTERN 前输入指定特殊字符可以控制搜索的行为。主要有: ^N 或 !...如果搜索到达当前文件的开头,但没有找到匹配项,那么搜索将继续在命令行列表中的前一个文件中进行 ^F 或 @ 从命令行列表中最后一个文件的最后一行开始搜索,不管当前屏幕上显示的是什么,也不管 -a 或

    5.8K30

    Shell笔记5:sed用法详解

    d’ a.txt 删除所有不包含xml的行 sed '/^install/d' a.txt 删除所有以 sed '$d' a.txt 删除最后一行 sed '/^$/d' a.txt删除所有空行 sed...‘YY’ 4,7iYY 在第4-7行的每一行前添加文本 a 行后插入文本:2aYY 在第2行之后添加文本 /^XX/aYY 在以XX开头的行之后添加文本 c 替换当前行:2cYY 将第2行的内容修改为YY...行下方插入文本b.txt 4,7r b.txt 在第4-7行每一行后插入文件b.txt w:保存到文件 3w c.txt  将第3行另存为文件c.txt 4,7w c.txt 将第4-7行另存为文件c.txt...p' /etc/passwd n读下一行,读取下一行进行处理 sed -n 'p;n' reg.txt 读取奇数行 sed -n 'n;p' red.txt 读取偶数行 sed综合脚本示例 根据/etc...a[$0]++' filename a为数组名 $0为处理对象 表示要去除的是整行重复的内容,如果要去除的是字段重复的行,可以将$0改为$1 $2 提取测试文件:awk -F: '{print $7}'

    2.2K10

    Shell实用工具

    命令: 删除第1行,第4行数据 sed '1d;4d' sed.txt ? 演示2: 删除奇数行 从第一行开始删除,每隔2行就删掉一行。...演示3: 删除指定范围的多行数据 删除从第1行到第3行的数据 sed '1,3d' sed.txt # 1,3 从指定第1行开始到第3行结束 ?...演示3: 删除指定范围取反的多行数据 删除从第1行到第3行取反的数据 sed '1,3!d' sed.txt # 1,3! 从指定第1行开始到第3行结束取反, 就是不在这个范围的行 ?...演示3: 将最后一行修改为hello 命令 sed '$chello' sed.txt ?...演示3: 第一行数据复制粘贴替换其他行数据 将模式空间第一行复制到暂存空间(覆盖方式), 最后将暂存空间的内容复制到模式空间中替换从第2行开始到最后一行的每一行数据(覆盖方式) sed '1h;2,$g

    10.2K10

    Sed..

    P # (大写) 打印模板块的第一行。 q # 退出Sed。 b lable # 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。 r file # 从file中读行。...t label # if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。...T label # 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 w file # 写并追加模板块到file末尾。...sed '/^$/d' file 删除文件的第2行: sed '2d' file 删除文件的第2行到末尾所有行: sed '2,$d' file 删除文件最后一行: sed '$d' file 删除文件中所有开头是...: sed -n '/test/,/check/p' file 打印从第5行开始到第一个包含以test开始的行之间的所有行: sed -n '5,/^test/p' file 对于模板test和west

    2.6K20

    蓝桥杯枚举算法精讲:从普通枚举到二进制枚举

    如果改为28天,就破坏了这种隐含的闰年保证,导致代码不完整。 如果改为28天会有什么问题? 假设将 day 数组中的二月改为28天,代码只会枚举到二月28日。...(比如第 2 行的按法由第 1 行剩下的灭灯位置决定); 模拟完所有行后,检查最后一行是否全亮,统计最小步数。...环节 5:判断结果 + 输出 实际需求 最后一行如果全亮(即没有需要翻转的灯→t[4]=0),说明该按法有效,记录最小步数。...逐行推导后续行:从第二行到倒数第一行,每一行的状态都是 “被前一行唯一确定” 的 —— 目的是保证每一列的 1 的个数为偶数(比如当前行第j列是否修改,由上一行第j列累计的 1 的个数是否为奇数决定);...验证最后一行:前面的推导只保证了 “列偶数”,最后一行的 “行偶数” 需要单独验证(因为前面的行是为了满足列而推导的,最后一行的行状态没有下一行来修正); 判定合法方案:只有 “最后一行的行偶数也满足

    48410

    linux中sed命令总结

    P # (大写) 打印模板块的第一行。 q # 退出Sed。 b lable # 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。 r file # 从file中读行。...t label # if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。...T label # 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 w file # 写并追加模板块到file末尾。...sed '/^$/d' file 删除文件的第2行: sed '2d' file 删除文件的第2行到末尾所有行: sed '2,$d' file 删除文件最后一行: sed '$d' file 删除文件中所有开头是...: sed -n '/test/,/check/p' file 打印从第5行开始到第一个包含以test开始的行之间的所有行: sed -n '5,/^test/p' file 对于模板test和west

    4.9K20

    leetcode 1289. 下降路径最小和 II

    =k) dp[i][j] = min(dp[i - 1][k] + arr[i][j], dp[i][j]); } } } //在最后一行中找出最小值 int Min...* n 个状态需要转移 每次转移的时候,枚举上一行的所有列 我们要确保所有的方案都枚举到,得到的才是全局最优解。...由于 f[i][j] 只会从 f[i - 1][i1] 或 f[i -1][i2] 转移而来,那么我们并不用将第 i - 1 行的所有状态存储下来,而是可以浓缩成三个变量: first_sum 表示这一行的最小值...由于在计算第 i + 1 行的状态时,不需要第 i - 1 行的任何信息,因此第 i - 1行浓缩成的三个变量此时可以被丢弃。这样以来,我们就将空间复杂度从 O(N^2) 降低至了 O(1)。...//如果上一行最小值与当前列发生冲突,那么选上一行次小值加上去 int cur_sum = (first_pos !

    51830

    【数据结构与算法】递归、回溯、八皇后 一文打尽!

    在迷宫问题中,递归关系可以描述为:如果当前位置可通过且未被访问过,则将当前位置标记为已访问,并尝试向四个方向递归搜索路径。 最后,我们要处理递归函数的返回值。...在每个节点上,递归函数检查当前节点的选择是否满足不攻击的条件,如果是,则将其添加到结果集中。然后,递归地调用自身来继续探索下一行的选择。...在每个节点上,递归函数检查当前节点的选择是否满足不攻击的条件,如果是,则将其添加到结果集中。然后,递归地调用自身来继续探索下一行的选择。...具体步骤如下: 初始化一个长度为 8 的一维数组 arr,将其所有元素初始化为 0 从第一行开始逐行放置皇后,调用递归函数 backtrack(arr, 0),其中第二个参数表示当前放置的行数。...对于每个位置,判断是否与已经放置的皇后冲突,如果不冲突,则将该位置记录到 arr 中,然后递归调用 backtrack(arr, row + 1) 进行下一行的放置。

    1K10
    领券