使用bash在第一行和最后一行替换第k至第n个字符?

时间:2018-11-25 08:32:54

标签: bash text awk sed

我想替换文件页眉和页脚中的某些字符。如果要说,我想替换第5到第9个字符怎么办?我需要使用bash或shell命令。

我想做这样的事情

s="abcdabcd"
s=s=s[0]+"12"+s[4:]
>a12dabcd

我有一个可以替换的确切长度的字符串,以及替换的开始和结束。我想将生成的替换项放回文件中。

示例:

我有这个标题:

HEADER 22aabbccdd23aabbccdd

我得到这些开始和结束索引:2,10

我得到以下字符串:xyz56789

我想要这个:HEADER 22xyz5678923aabbccdd

替换文件中现有的第一行。

2 个答案:

答案 0 :(得分:0)

这可以通过Perl完成:

perl -i -lpe 'if ($. == 1 || eof) { substr($_, 1, 2) = "12" }' input.txt
  • -i:就地修改文件
  • -l:自动从输入中去除换行符并将其重新添加到输出中
  • -p:遍历输入文件的各行,然后将它们打印出来
  • -e CODE:每行要做什么

首先,我们检查当前行号($.)是否为1(即我们正在处理文件的第一行)还是到达文件的末尾(即当前正在处理的行是文件的最后一行)。如果条件为真,则从长度2的偏移量1开始,获取当前行($_)的子字符串,并将其设置为"12"

答案 1 :(得分:0)

仅使用sed

input.txt:

$ cat input.txt
22aabbccdd23aabbccdd
asasdfsdfd234234234234

$ sed -Ei '1 s/(..).{8}/\1xyz56789/' input.txt

结果:

22xyz5678923aabbccdd
asasdfsdfd234234234234