如何使用 sed 仅替换特定的 20 个字符

如何使用 sed 仅替换特定的 20 个字符

文件.dat

No      Name                       Title               Publisher           Edition

1001 Programming in Java By BPB    Balaguruswamy       BPB                 Second 
1002 Computer Networks             Tanenbaum           Pearson             Fifth
1003 Operating Systems             Chaudhari           Jaico               First
  1. 否:数字 (4) – 唯一标识每本书
  2. 标题:字母数字(30)
  3. 作者:人物(20)
  4. 出版者: 人物(20)
  5. 版本:人物(9)

我想将所有发布者的名称替换BPB为 ->THM 仅在发布者栏下。使用sed,它不仅取代了出版商列,但也在姓名柱子。我只想sed在以下时间之间工作第55个字符第 74 个字符

我使用提取了第 55-74 个字符

while IFS= read -r line; do
    echo ${line:55:20}
done < $file

我应该怎么做才能只替换特定的 20 个字符?

提前致谢

答案1

就像是:

完整替换出版商列(BPB后跟 17 个空格):

sed 's/^\(.\{55\}\)BPB\( \{17\}\)/\1THM\2/'

要将BPB字符串替换为THM发布者列中出现的任何位置:

sed '
  :1
    s/^\(.\{55,72\}\)BPB/\1THM/
  t1'

相关内容