linux 从文本文件中删除前N个字符

pkmbmrz7  于 2022-11-02  发布在  Linux
关注(0)|答案(3)|浏览(266)

我有一个大型数据文件,其中包含以下数据:

01 01 00 2c 00 82 03 00 02 00 00 00 07 08 07 08   
07 08 07 08 07 08 07 08 07 08 07 08 07 08 07 08   
07 08 07 08 07 08 07 08 07 08 07 08 07 08 07 08   
07 08 07 08 07 08 07 08 07 08 07 08 07 08 07 08   
0f 08 08 08 0a 08 07 08 0f 08 08 08 08 08 08 08   
08 08 08 08 08 07 08 07 0a 07 07 07 0f 07 08 07   
08 07 08 07 08 07 08 07 08 07 08 07 0a 07 07 07   
..
.....

我想删除第6行中的前n个字符
我已经找到了命令:

sed 's/^.\{,n\}//' file

但是这个命令删除了每行的前n个字符,这是我不希望发生的。
有人能建议正确的命令吗?

eufgjt7s

eufgjt7s1#

GNU sed允许您使用address的形式
第一步(~ S)
(...)匹配从第一行(...)开始的每隔一行
因此,1~6确实属于第1、第7、第13等等行,2~6属于第2、第8、第14等等行,令file.txt内容为

01 01 00 2c 00 82 03 00 02 00 00 00 07 08 07 08   
07 08 07 08 07 08 07 08 07 08 07 08 07 08 07 08   
07 08 07 08 07 08 07 08 07 08 07 08 07 08 07 08   
07 08 07 08 07 08 07 08 07 08 07 08 07 08 07 08   
0f 08 08 08 0a 08 07 08 0f 08 08 08 08 08 08 08   
08 08 08 08 08 07 08 07 0a 07 07 07 0f 07 08 07   
08 07 08 07 08 07 08 07 08 07 08 07 0a 07 07 07   
..
.....

n等于5,那么你就可以

sed '1~6 s/^.....//' file.txt

其给出输出

00 2c 00 82 03 00 02 00 00 00 07 08 07 08   
07 08 07 08 07 08 07 08 07 08 07 08 07 08 07 08   
07 08 07 08 07 08 07 08 07 08 07 08 07 08 07 08   
07 08 07 08 07 08 07 08 07 08 07 08 07 08 07 08   
0f 08 08 08 0a 08 07 08 0f 08 08 08 08 08 08 08   
08 08 08 08 08 07 08 07 0a 07 07 07 0f 07 08 07   
 08 07 08 07 08 07 08 07 08 07 0a 07 07 07   
..
.....
  • (已测试GNU sed 4.7)*
9udxz4iz

9udxz4iz2#

awk -v n=17 '(NR%6)==1 { print substr($0, n+1); next } 1' file

该条件对行号NR使用模运算,从第一行开始每隔六行选择一行。最后一行1使其他行正常打印。
你还没有透露n的价值,所以我猜。

jv2fixgn

jv2fixgn3#

gawk/nawk解决方案。mawk需要一种稍微不同方法,
第一个

相关问题