使用sed获取前N个字符和最后N个字符

时间:2016-02-25 20:38:20

标签: regex bash unix sed

我有一个包含每行大量数据的记录的文件。 例如:

:~$ cat filename
record_1 data_a data_b data_c data_d data_e 123
record_2 data_a data_b data_c data_d data_e 456
record_3 data_a data_b data_c data_d data_e 789

我想使用NN查看文件中每行数据的前sed个字符和最后grep个字符中的信息特定记录例如

:~$ grep 'record_1' filename | [some sed command here]
record_1 123

我可以使用sed命令还是有其他方法来获得这种结果?非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

使用sed即可:

sed -rn '/record_1/s/(.{8}).*(.{3})$/\1 \2/p' file

record_1 123

如果您想阅读第一个和最后一个字段,请使用:

awk '/record_1/{print $1, $NF}' file

record_1 123

答案 1 :(得分:0)

awk可能会更好,特别是如果所有记录的长度都相同,就像问题中所示。

    awk '{print $1 $n}' filename

其中n是最后一个字段的编号。 $ 7包含123,$ 6包含data_e,依此类推。

答案 2 :(得分:0)

如果你想根据给定的尺寸提取字符,这是另一种选择

$ s=8;e=3; paste <(cut -c1-$s file) <(rev file | cut -c1-$e | rev)

record_1        123
record_2        456
record_3        789

指定从s(tart)到e(nd)的大小。