跟老男孩学Linux运维-核心系统命令实战-第3章-文件过滤及内容编辑处理命令-paste合并文件

3.10.paste 合并文件(*****)

3.10.1.命令详解

#-d:指定合并的分隔符,默认是 TAB ---常用---
#-s:每个文件占用一行

3.10.2.使用范例

1.基础范例

#3-37:默认合并文件
#查看文件
cat test1

#文件内容如下
1
2
3
4
5
6

#查看文件
cat test2

#文件内容如下
aaaa
bbbbbbb
ccccccccc

eeeeeeeeeee
gggggg

#2个文件按行进行合并
paste test1 test2

#3-38:通过-d可以指定分隔符
paste -d: test1 test2

#3-39:通过-s合并内容,使其成行
paste test1

#使用-s选项,将1列内容转换成1行
paste -s test1
paste -s test2

#每个文件占用一行
paste -s test1 test2

#3-40:与cat命令合并文本的方式进行对比
#cat 是将2个文件按顺序前后合并
cat test1 test2 

2.生产范例

#3-41:假设通过 Shell 脚本生成的账号密码如下所示

#内容如下
stu10309
7f753cc3
stu10312
646e06d
stu10315
18273b95
stu10318
d6908f61
stu10321
c441a16e
stu10327
11ea966b

#要求使用命令将上面的文本转换成下面 SVN 服务配置文件中的账号及密码格式
stu10309=7f753cc3
stu10312=646e06d
stu10315=18273b95
stu10318=d6908f61
stu10321=c441a16e
stu10327=11ea966b

#提示:实现的思路就是将奇数行和偶数行用"="(等号)连接成一行
#方法一:采用 paste 命令加 -s 参数实现
paste -s test.txt

#这是 paste 命令的特殊用法,轮流用等号和 \n 做分隔符(\n是换行符,是不可见的,下面的命令结果是为了方便大家理解而加上的)
paste -sd '=\n' test.txt

#方法二;采用 paste 命令加 -d 参数实现
#这种用法在命令里很少见,功能是不从文本读取输入,而是从标准输入读入。每1个"-"代表读入一行,所以这里有两个 "- -",并用 "=" 进行分隔
paste -d '=' - - < test.txt

#方法三:采用 xargs+sed 命令实现
#-n 参数表示多少个字符串为一组
xargs -n 2 <test.txt
#将上述结果中的空格替换为=号
xargs -n 2 <text.txt|sed 's# #=#g'

#方法四:sed 的特殊应用
sed 'N;s#\n#=#g' test.txt

详细说明

sed 内置命令 N 的作用:不会清空模式空间内容,并且从输入文件中读取下一行数据,追加到模式空间中,两行数据以换行符 \n 连接。

第一行是 "stu10312" 存入模式空间,碰到命令 "N",读取第二行 "636e026d" ,此时模式空间内容为 "stu10312\n636e026d";然后执行 "s#\n#=#g" 将 "\n" 替换为 "=",即为 "stu10312=636e026d",输出到屏幕上,第一个循环结束;后面的循环和前面的思路一样,直到文件结束。

posted on 2020-01-12 20:00  herisson_pan  阅读(12)  评论(0)    收藏  举报

导航