请把下面的字符串:1
2
3
4
5
6
7
8
9
10zhangsan
y97JbzPru
lisi
5JhvCls6q
xiaowang
Nnr8qt2Ma
laoma
iqMtvC02y
zhaosi
9fxrb4sJD
改为如下:1
2
3
4
5zhangsan:y97JbzPru
lisi:5JhvCls6q
xiaowang:Nnr8qt2Ma
laoma:iqMtvC02y
zhaosi:9fxrb4sJD
核心要点
两种方法
- 使用sed命令的
N
功能 sed的N会把下一行追加到模式空间中。如果不加N,sed是一行一行处理,如果加上N就是两行两行处理,N后面需要加’;’,也可以加上两个N,如N;N;
这样就会三行三行处理。根据题意是每两行做一次替换,并把第一行结尾的’\n
‘替换成’:
‘。参考45题 - 把奇数行和偶数行合并,先计算总行数,然后while循环,从i=1开始,每循环1次,i+2,一直到i大于等于总行数才结束循环。每次循环,j的数值比i大1,这样i就是奇数行,j就是偶数行
代码内容
使用sed命令1
$ sed "N;s/\n/:/g" 1.txt
使用shell1
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
#
#program:
# 请把下面的字符串:
# zhangsan
# y97JbzPru
# lisi
# 5JhvCls6q
# xiaowang
# Nnr8qt2Ma
# laoma
# iqMtvC02y
# zhaosi
# 9fxrb4sJD
# 改为如下:
# zhangsan:y97JbzPru
# lisi:5JhvCls6q
# xiaowang:Nnr8qt2Ma
# laoma:iqMtvC02y
# zhaosi:9fxrb4sJD
#history:
#2020/03/18 kun V1.0
cat > 1.txt <<EOF
zhangsan
y97JbzPru
lisi
5JhvCls6q
xiaowang
Nnr8qt2Ma
laoma
iqMtvC02y
zhaosi
9fxrb4sJD
EOF
# n是总行数
n=`cat 1.txt |wc -l`
# i是奇数行 j是偶数行
i=1
while [ $i -lt $n ]
do
j=$[$i+1]
i_line=`sed -n "${i}p" 1.txt`
j_line=`sed -n "${j}p" 1.txt`
echo "$i_line:$j_line"
i=$[$i+2]
done
rm -rf 1.txt