利用Python读取文件(针对大文件和小文件两种)的首行(第一行)和末行(最后一行)。...脚本借鉴了前人的两种处理思路(在下面的脚本中有注释说明引用出处),并修正了原先两种处理方法中如果文件末尾含有多个空行而返回空行的问题。...脚本内容可以从GitHub上获取: https://github.com/DingGuodong/LinuxBashShellScriptForOps/blob/master/functions/file
利用这列分组数据,我们能方便地查找并获取所有匹配的值。 如下图1所示的工作表,我们想查找商品名称是“笔记本”且在区域A的所有数据。 ?...可以看到,工作表中以商品名称是“笔记本”且在区域A的数据行为分界点连续编号。 在单元格G3中输入公式: =MAX(E3:E20) 得到共有多少个满足条件的查找值。...在单元格H6中输入公式: =IF(G6<=3,INDEX(B3:E20,MATCH(G6,E3:E20,0),COLUMNS( 向下向拉至第10行,向右拉至第J列。...公式很简单,其关键在于: MATCH(G6,E3:E 查找到第n个(由列G中的单元格指定)匹配的值所在的位置。 而COLUMNS($H6:H6)则返回要获取的值所在列的位置。...如果使用定义的名称,则公式更加简洁,如下图2所示。 ? 图2 欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。 欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料。
[013613CC3F594F2FB7444E6AD1DE4CDA] 有一个部门领导表dept_manager简况如下: [EFBA0FC874C43A13F3732087E07217A6] 请你找出所有非部门领导的员工...); INSERT INTO employees VALUES(10003,'1959-12-03','Parto','Bamford','M','1986-08-28'); 解题思路: 1、此题解题的思路...,就是查找出部门领导中的员工编号,然后去员工表中查找,不在这部分员工编号中的数据即可。...参考答案: select emp_no from employees where emp_no not in (select emp_no from dept_manager); 此题也有其他的解法...不是很推荐这种做法,这种查询的结构满足笛卡尔积,效率上更为低下一些。
标签:VBA 下面的VBA自定义函数可以返回指定工作表中已使用区域之后的第一个空行行号。...,调用上述函数后,返回数字9,即已使用区域后的第一行是第9行。...图1 由示例可见,即便工作表中已使用区域前面存在空行,该函数仍然返回已使用区域后的第一个空行。...有很多人喜欢使用下面的语句: Cells(Rows.Count, 1).End(xlUp).Row + 1 返回最后一行之后的空行。然而,这只是返回第1列最后一个数据之后的空行。...如果要返回所有列中最后一个出现数据的行后的空行,那就必须知道哪一列中最后一个数据比其它列出现的行大,但对于许多工作表来说,事先是不知道的。因此,本文前面给出的自定义函数最为灵活。
在日常运维中,经常需要监控某个进程,并打印某个进程的监控结果,通常需要打印匹配某个结果的行以及其前后各N行。...2)打印/opt/test中所有匹配"main is failed"的行及其前1行 [root@mq-master02 ~]# cat /opt/test |grep "main is failed"...3)打印/opt/test中所有匹配"main is failed"的行及其后1行 [root@mq-master02 ~]# cat /opt/test |grep "main is failed"...192.168.10.17 4)打印/opt/test中所有匹配"main is failed"的行及其前后各1行 [root@mq-master02 ~]# cat /opt/test |grep...192.168.10.17 5)把/opt/test中所有匹配"main is failed"的行及其前1行的结果打印到/root/result.log中,并加上时间 [root@mq-master02
/******************获取匹配组下的所有网络名******************/ defun(GetMatchGroupNetNames (MGName) MG=axlDBGetDesign...length(groupMemberstable)-1 axlUIWPrint(nil "groupMemberstable[%d]=%s" j groupMemberstable[j]) ) 代码中的MDQ0...~7需修改为pcb中的匹配组名称。
我们知道在 JS 中用递归算法很容易会让调用栈溢出,为了能在生产环境中使用,必须要用非递归方式的去实现。...1、算法过程 以计算下图为例, 节点 3 到 节点 6 所有路径所有可能的路径为 8 条: ? 获取图中两节点之间的所有路径 我们具体讲一下如何获取这 8 条路径的过程。...进行至此,我们终于获取了一条从 v3 到 v6 的路径。 应该为自己的努力鼓个掌,已经看到胜利的曙光;接下来加个简单的循环就能获取所有的路径。...随着 建栈(build stack) 和 削栈(cutdown stack) 过程的进行,主栈和辅栈不断变化着,在这个变化的过程中我们就能不断地获取从 v3 到 v6 的路径,最终就可以获取所有的路径...能够体会得到知识点只有经过自己思考和总结后,才能为之后的融会贯通打下基础。
-E 显示行结束符 -n 显示文本内容时显示行号 -A 显示所以控制符 -b 非空行编号 -s 压缩连续的空行成一行...-f 实时查看,常用监控日志文件 -c # 显示后#字节 -n # 显示后#行,默认显示行10行 [root@bogon ~]# tail -2 /etc/passwd ##...配合-c,严格校验排序;不配合-c,则只输出一次排序结果 -t 使用指定的分隔符代替非空格到空格的转换 -k 1 在位置1 开始一个key,在位置2 终止(默认为行尾) [root@bogon...-q 静默模式,不输出任何信息 -A # after, 后#行 行 -B # before, 前#行 行 -C # context, 前后各#行 行 -e 实现多个选项间的逻辑...次 \{m,\} 匹配前面的字符至少m次 ^ 行首锚定,用于模式的最左侧 $ 行尾锚定,用于模式的最右侧 ^PATTERN$ 用于模式匹配整行 ^$ 空行 ^[[:space:]]*
+#:打开文件后,直接让光标处于第#行的行首; +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行; 模式转换: 编辑模式:默认模式 编辑模式 -> 输入模式: i:insert...:大小写切换 删除命令: 编辑模式删除 d:删除命令,可结合光标跳转字符,实现范围删除; d$:删除光标所在位置到行尾的字符; d^:删除光标所在位置到非空行首的字符; d0:删除光标所在位置到行首的字符...y^:复制光标所在位置到非空行首的字符 y0:复制光标所在位置到行首的字符 ye:复制标所在位置到当前单词或下个单词词尾的字符 yw:复制光标所在位置到下个单词词首的字符 yb...实现删除操作; c$:删除光标所在位置到行尾的字符并且切换为输入模式; c^:删除光标所在位置到非空行首的字符并且切换为输入模式; c0:删除光标所在位置到行首的字符并且切换为输入模式;...1,$:范围为第一行至最后一行 %:全文 /pattern/:从光标所在处起始向文件尾部第一次被模式所匹配到的行; /first/,$:从光标所在处起始,第一次由pat1匹配到的行开始,至最后一行中间的所有行
-type d #查找/data/目录下的非文件夹;find /data/ -type l #查找/data/目录下的链接文件。...在jfedu.txt每行后加入空行,也即每行占永两行空间,每一行后边插入一行空行、两行空行及前三行每行后插入空行: sed ‘/^$/d;G’ jfedu.txtsed ‘/^$/d;G;G’ jfedu.txtsed...匹配行前一行、后一行插入空行以及同时在匹配前后插入空行: sed ‘/jfedu/{x;p;x;}’ jfedu.txtsed ‘/jfedu/G’ jfedu.txtsed ‘/jfedu/{x;p;...x;G;}’ jfedu.txt 在jfedu.txt每行后加入空行,也即每行占永两行空间,每一行后边插入空行: sed ‘/^$/d;G’ jfedu.txt 在jfedu.txt每行后加入空行,...TEST所有的行;grep -n “test” jfedu.txt 打印test的行及行号;grep -v “test” jfedu.txt 不打印test的行;grep “test[53]” jfedu.txt
w 保存模式匹配的行至指定文件 r 读取指定文件的文本至模式空间中匹配到的行后。 ! 表示后面的命令对匹配行取反。 = 打印当前行号码。...~]# echo 1234567|sed 's/67/CD&/' (匹配词67之前) 12345CD67 sed元字符集: ^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。...$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。 . 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。...* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。...n;d' 1 3 5 7 9 [root@CentOs7 ~]# cat seq.txt |sed '/^$/d;G' 空行删除,每行后加一个空行,即保证每行后只有一个空行 [root@CentOs7
介绍 sed (stream editor, 流编辑器) 是Linux下一款功能强大的非交互流式文本编辑器(vim是交互式文本编辑器),可以对文本文件的每一行数据匹配查询之后进行增、删、改、查等操作,支持按行...-f 后跟保存了sed指令的文件。 -n 取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行。...将替换后的内容写入到sed2.txt文件中 # 第一种方式 sed -n 's/itheima/hello/2pw sed2.txt' sed.txt # w写入 # p打印, -n只是获取 # 第二种方式...sed -n 's/itheima/hello/2p ' sed.txt > sed2.txt 运行效果 3.7 正则表达式匹配替换 匹配有 i 的行,替换匹配行中 t 后的所有内容为空字符串:...将前3行数据复制到暂存空间(追加方式),之后将暂存空间的所有内容复制粘贴到模式空间最后一行(追加方式) sed '1,3H;$G' sed.txt 运行效果 6.5 给每一行添加空行 插入空行 sed
在匹配式样的行前、行后各插入一空行 sed '/hello/{x;p;x;G;}' awk '{ if(/hello/) printf("\n\%s\n\n", 二、文本的替换 1、在每一行查找到...sed '/^$/d;G' # 在每一行后面增加两行空行 sed 'G;G' # 将第一个脚本所产生的所有空行删除(即删除所有偶数行) sed 'n;d' # 在匹配式样“regex”的行之前插入一空行...# 删除第一行空行后的所有内容 # 提取新闻组或 e-mail 的正文部分 sed '1,/^$/d' # 删除第一行空行之前的所有内容 # 从邮件头提取“Subject”(标题栏字段.../d;g;q' # 获取邮件地址。在上一个脚本所产生的那一行邮件头的基础上进一步的将非电邮 # 地址的部分剃除。.../d;g;q' # 获取邮件地址。在上一个脚本所产生的那一行邮件头的基础上进一步的将非电邮 # 地址的部分剃除。
加行号 -s filename 压缩空行(连续相邻的空行)' -b 加行号,但空行不加cat > f3 给文件写入内容(nl==cat -b ) 2、more(分页查看文件) 3、less(支持搜索man...paste f1 f2 > f3 (横向合并 各自第一行放在同一行) cat f1 f2 > f4 (纵向合并) -d 指定分割符 -s 所有行横着显示 8、wc(文本统计) -l 行数 -w 单词...后#行 包含当前行后续的的三行 -B # 前#行 -C # 前后各#行 -e 实现多个选项间的逻辑or关系 grep -e 'cat' -e 'dog' file -w 整行匹配整个单词 -E 使用ERE...:] 空白字符 [:cntrl:] 不可打印的控制字符(退格、删除、警铃) [:digit:] 十进制数字 [:xdigit:] [:graph:] 可打印的非空白字符 [:print:] 可打印的非空白字符...锚定行首 $锚定行尾 ^PATTERN$用于模式匹配整行 ^$空行 ^[[:space:]]*$ 空白行 \< 或 \b 词首锚定,用于单词模式左侧(单词边界,除了字母、下划线、数字) \> 或 /b
; (3)显示所有的(去掉注释和空行)有效行。...在终端输入vim SYM.sh编写一个简单的脚本程序如下: 在终端输入bash -x SYM.sh输出结果包括了注释行和非注释行,如下图 2.使用grep、sed和awk对脚本文件SYM.sh实现: (.../^[[:space:]]*#/:正则表达式,表示不匹配以0个或多个空格开头,紧接着是#号的行。 SYM.sh:要搜索的文件名。 运行结果为: (3)显示所有的(去掉注释和空行)有效行。...-v:表示显示不匹配的行,也就是去除匹配的行。 -E:表示使用扩展的正则表达式。 ^\s*($|#):正则表达式,表示匹配空行或以0个或多个空格开头,紧接着是#号的行,并将其删除。.../^[[:space:]]*#/d:正则表达式,表示匹配以0个或多个空格开头,紧接着是#号的行,并将其删除。 /^$/d:表示匹配空行,并将其删除。 SYM.sh:要搜索的文件名。
-E:显示行结束符$-n:对显示出的每一行进行编号-A:显示所有控制符-b:非空行编号-s:压缩连续的空行成一行u tacu Rev2 分页查看文件内容u more: 分页查看文件more [OPTIONS...-d: 显示翻页及退出提示u less: 一页一页地查看文件或 STDIN 输出查看时有用的命令包括:/文本 搜索 文本n/N 跳到下一个或上一个匹配less 命令是 man 命令使用的分页器3 显示文本前或后行内容...-C#:指定获取前#字节-n#:指定获取前#行-#:指定行数u tail [OPTION]... [FILE]......-c#:指定获取后#字节-n#:指定获取后#行-#:同上-f:跟踪显示文件 fd 新追加的内容,常用日志监控相当于--follow=descriptor-F:跟踪文件名,相当于--follow=name...-d分隔符:指定分隔符,默认用 TAB-S:所有行合成一行显示示例:paste f1 f2paste -s f1 f26 收集文本统计数据 wcu 计数单词总数、行总数、字节总数和字符总数u 可以对文件或
sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。...:后跟保存了sed指令的文件 -i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改 -n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行 sed中的编辑命令...*//g’ 1.txt #匹配有#号的行,替换匹配行中逗号后的所有内容为空 (,.*)表示逗号后的所又内容 sed ‘s/......*//’ 1.txt #将1.txt文件中以#开头的行替换为空行,即注释的行 ( ^#)表示匹配以#开头,(.*)代表所有内容 sed ‘s/^#....*//;/^$/d’ 1.txt #先替换1.txt文件中所有注释的空行为空行,然后删除空行,替换和删除操作中间用分号隔开 sed ‘s/^[0-9]/(&)/’ 1.txt #将每一行中行首的数字加上一个小括号
[pwd命令] 3.basename & dirname 命令 basename命令用于获取路径的文件名,dirname用于获取路径的目录名。...开头的文件、无法匹配路径分隔符符号 "/" # 匹配目录中所有隐藏文件和非隐藏文件 ls .* * 开启dotglob功能,"*"可以匹配以"."...cp命令默认谁指定复制动作,复制后的文件所有者和组就是归属谁 r/R:递归复制,常用于复制非空目录 d:复制的源文件如果是链接文件,则复制链接文件而不是指向的文件本身。...选项 n:先出所有行的行号 b:显示非空行的行号 E:在每行的行尾加上$符号 T:将TAB符号输出为"^|" s:压缩连接的空行为单个行 功能演示:将键入的内容重定向至文件,而非标准输入中 [cat命令重定向至文件...选项 n:输出最后num行,如果使用-n +num表示打印从第num行开始的所有行 f:监控文件变化 --pid=PID:和-f一起使用,在给定的PID的进程死亡之后,终止文件监控 v:显示文件名 15
+/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首 vim + file 直接打开file,光标在最后一行 三种主要模式: 命令模式:移动光标,剪切粘贴等...d 删除命令,可结合光标跳转字符,实现范围删除; d$ 删除到行尾 d^ 删除到非空行首 d0 删除到行首 dd 删除光标所在行...p2 第一次被p1匹配到的行到第一次被p2匹配到的行 扩展模式字符串查找: /world 从上向下查找world ?...world 从下向上查找world n 定位下一个匹配的字串 N 定位上一个匹配的字串 扩展模式字符串替换: :s/old/...s*//g 删除行首空格 :g/^$/d 删除空行 :5,10s/^/#/g 在5到10行行首插入#号注释 可视话模式: 允许选择的文本块,可代替鼠标。
演示7: 正则表达式匹配替换 匹配有 i 的行,替换匹配行中 t 后的所有内容为空 sed '/i/s/t.*//g' sed.txt # /t.*/ 表示逗号后的所又内容 ?...示例: 给每一行添加空行 插入空行 sed G -i sed.txt # G 每行后面添加一个空行 # -i 修改源文件 ?...示例: 删除所有的空行 命令 sed -i '/^$/d' sed.txt ?...示例: 打印含有匹配信息的行 搜索passwd文件有root关键字的所有行 awk '/root/' passwd # '/root/' 是查找匹配模式, 没有action命令, 默认输出所有符合的行数据...示例: 打印10到20行的第一列 获取第10到20行的第一列的信息 awk -F: '{if(NR>=10 && NR<=20) print $1}' passwd ?
领取专属 10元无门槛券
手把手带您无忧上云