Linux中往文件中的某行插入数据 以及 行列转化的做法(paste、xargs等)
sed -i 'ni\x' test.file 表示向test.file文件里的第n行的前面添加x内容
sed -i 'na\x' test.file 表示向test.file文件里的第n行的后面添加x内容
sed -i '/m/i\x' test.file 表示向test.file文件里匹配m字符串的行的前面添加x内容
sed -i '/m/a\x' test.file 表示向test.file文件里匹配m字符串的行的后面添加x内容
-i 表示in front,前面
-a 表示after,后面
比如向a.txt文件的首行添加123456789
# sed -i '1i\123456789' a.txt
比如向a.txt文件的第3行添加hhhhh
# sed -i '3a\hhhhh' a.txt
比如向a.txt文件匹配abcd字符串的行的前面添加66666
# sed -i '/abcd/i\66666' a.txt
比如向a.txt文件匹配1234字符串的行的后面添加hahaha
# sed -i '/1234/a\hahaha' a.txt
在/etc/my.cnf文件中匹配[mysqld]行的下面添加"skip-grant-tables", 注意[mysqld]前面需要加一个转义符!
# sed -i '/\[mysqld]/a\skip-grant-tables' /usr/local/mysql/my.cnf
比如向/etc/puppet/puppet.conf文件中的第2行的前面添加" server=puppet01.test.cn"内容
然后再向第3行添加" runinterval = 600"内容
# /bin/sed -i '2i\ server=puppet01.test.cn' /etc/puppet/puppet.conf
# /bin/sed -i '3i\ runinterval = 600' /etc/puppet/puppet.conf
################## 远程批量关闭进程main的脚本 ##################
1 2 3 4 5 6 | [root@kevn script] # cat 6_main_stop.sh #!/bin/bash for i in $( cat /opt/ip .list) do ssh -p22 root@$i 'ps -ef|grep main|grep -v grep|awk -F" " "{print $2}"|xargs kill -9 >/dev/null 2>&1' done |
################## 取文件中最后一个字符 ##################
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 取最后一个字符: awk '{print substr($0,length())}' filename [root@localhost ~] # cat a 3G 32G 123G 2348G 123131G 123123123123123G [root@localhost ~] # awk '{print substr($0,length())}' a G G G G G G [root@localhost ~] # awk -F"G" '{print $1}' a 3 32 123 2348 123131 123123123123123 |
################## 将多行文本转换成一行并用逗号隔开 ##################
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [root@kevin ~] # cat test 172.16.60.211 172.16.60.212 172.16.60.213 172.16.60.214 172.16.60.215 172.16.60.216 172.16.60.217 172.16.60.218 172.16.60.219 172.16.60.220 172.16.60.221 1)使用 xargs 方法,并用 tr 实现逗号隔开 [root@kevin ~] # cat test| xargs | tr ' ' ',' 172.16.60.211,172.16.60.212,172.16.60.213,172.16.60.214,172.16.60.215,172.16.60.216,172.16.60.217,172.16.60.218,172.16.60.219,172.16.60.220,172.16.60.221 2)使用 sed 实现多个字符串的替换。 sed 可以替换多个字符串,可以弥补 tr 的不足,后面g表示匹配多个。 [root@kevin ~] # cat test |xargs|sed 's/ /,/g' 172.16.60.211,172.16.60.212,172.16.60.213,172.16.60.214,172.16.60.215,172.16.60.216,172.16.60.217,172.16.60.218,172.16.60.219,172.16.60.220,172.16.60.221 |
################## 将一行内容按照字段分为多列 ##################
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | [root@k8s-master01 ~] # cat a.txt 172.20.100.100,172.20.100.101,172.20.100.102,172.20.100.103,172.20.100.104,172.20.100.105,172.20.100.106 将逗号替换为换行 [root@k8s-master01 ~] # sed 's/,/\n/g' a.txt 172.20.100.100 172.20.100.101 172.20.100.102 172.20.100.103 172.20.100.104 172.20.100.105 172.20.100.106 [root@k8s-master01 ~] # sed -i 's/,/\n/g' a.txt [root@k8s-master01 ~] # cat a.txt 172.20.100.100 172.20.100.101 172.20.100.102 172.20.100.103 172.20.100.104 172.20.100.105 172.20.100.106 |
################## paste命令用法 ##################
paste 命令用于合并文件的列,会把每个文件以列对列的方式,一列列地加以合并。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | 语法 paste [-s][-d <间隔字符>][--help][--version][文件...] 参数: -d<间隔字符>或--delimiters=<间隔字符> : 用指定的间隔字符取代跳格字符。 -s或--serial: 串列进行而非平行处理。 --help: 在线帮助。 --version: 显示帮助信息。 [文件…]: 指定操作的文件路径 比如: paste file testfile testfile1 #合并指定文件的内容 paste file testfile testfile1 -d ":" #合并指定文件的内容,并使用逗号隔开。-d后面的分隔符可以自行定义! paste -s file # 合并指定文件的多行数据。使用-s参数可以将一个文件中的多行数据合并为一行进行显示。 示例如下: [root@kevin ~] # cat aa.txt 11 22 33 44 55 [root@kevin ~] # cat bb.txt aa ab ac cc cd 使用 paste 命令将文件进行合并 [root@kevin ~] # paste aa.txt bb.txt 11 aa 22 ab 33 ac 44 cc 55 cd 合并后使用 ":" 隔开 [root@kevin ~] # paste -d":" aa.txt bb.txt 11:aa 22:ab 33:ac 44:cc 55: cd 合并后使用 "-" 隔开 [root@kevin ~] # paste -d"-" aa.txt bb.txt 11-aa 22-ab 33-ac 44-cc 55- cd paste -s 可以将一个文件中的多行内容合并为一行。例如: [root@kevin ~] # cat file 111 222 333 444 555 [root@kevin ~] # cat file |paste -s 111 222 333 444 555 [root@kevin ~] # cat file |paste -s -d":" 111:222:333:444:555 [root@kevin ~] # cat file |paste -s -d ":" 111:222:333:444:555 [root@kevin ~] # cat file |paste -s -d "-" 111-222-333-444-555 [root@kevin ~] # cat file |paste -s -d "---" 111-222-333-444-555 [root@kevin ~] # cat file |paste -s -d "," 111,222,333,444,555 看下面一个小需求: 有一个log.txt文件,第二列是ip,现在需要将log.txt文件中的ip列取出来放在一行,并用逗号隔开。 第一种做法: awk + paste [root@kevin ~] # cat log.txt 17:05 172.16.60.34 sadfjsafjsdf 17:14 172.16.60.35 asdfasudfasjfasjfklsafsaf 17:45 172.16.60.38 dsafkjdsajflsajfadf [root@kevin ~] # cat log.txt 17:05 172.16.60.34 sadfjsafjsdf 17:14 172.16.60.35 asdfasudfasjfasjfklsafsaf 17:45 172.16.60.38 dsafkjdsajflsajfadf [root@kevin ~] # cat log.txt |awk '{print $2}' 172.16.60.34 172.16.60.35 172.16.60.38 [root@kevin ~] # cat log.txt |awk '{print $2}'|paste -s 172.16.60.34 172.16.60.35 172.16.60.38 [root@kevin ~] # cat log.txt |awk '{print $2}'|paste -s -d"," 172.16.60.34,172.16.60.35,172.16.60.38 另一种做法是: awk + xargs + sed [root@kevin ~] # cat log.txt |awk '{print $2}' 172.16.60.34 172.16.60.35 172.16.60.38 [root@kevin ~] # cat log.txt |awk '{print $2}'|xargs 172.16.60.34 172.16.60.35 172.16.60.38 [root@kevin ~] # cat log.txt |awk '{print $2}'|xargs|sed 's/ /,/g' 172.16.60.34,172.16.60.35,172.16.60.38 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?