sed打印第N个字符

use*_*227 11 string bash shell sed

我有一个字符串列表,总是5个字符长.将每行的第一,第三和第五个字符(包括空格)转换为单个字符串的最佳方法是什么?

输入:

c   c
8   8
4   4
3   3
1   1
4   4
9   9
8 | c
  > 4
0   0
e | 5
6 | a
3   3
9 | c
b <  
1   1
b | 0
d <  
4   4
5 | 7
c   c
  > 3
.   .
1 | c
o   o
Run Code Online (Sandbox Code Playgroud)

输出:

c8431498 0e639b1bd45c .1o
c843149c405a3c 10 47c3.co
       |> || |< |  | > |
Run Code Online (Sandbox Code Playgroud)

我使用sed捕获组取得了一些成功,但忽略了尾随空格.

sed -e "s/^.*\(.\)$/\1/"
Run Code Online (Sandbox Code Playgroud)

编辑:澄清我需要包含空格,字符串包含一个点

tso*_*tso 4

使用GNU awk:

awk 'BEGIN{FS="";a="";b="";c="";}{a=a$1; b=b$3; c=c$5;}END{print a ORS c ORS b}' filename
Run Code Online (Sandbox Code Playgroud)

输出:

c8431498 0e639b1bd45c 
c843149c405a3c 10 47c3
       |> || |< |< | >
Run Code Online (Sandbox Code Playgroud)