sed或awk从特定位置替换到特定位置

时间:2015-10-19 19:22:08

标签: regex awk sed

我有两个问题:

  1. 我想用'0123456789'替换第35行到第40行的第10列到第19行。我怎么能用awk或sed做到这一点?
  2. 如果我不知道该行的结束位置,但我想将第10列的所有字符替换为字符串'0123456789'的行尾,那么如何用sed或awk实现呢?
  3. 这里通过列说,我的意思是每列一个字符,而不是分隔数据文件中的那种列。

2 个答案:

答案 0 :(得分:2)

这可能适合你(GNU sed):

sed '35,40s/^\(.\{9\}\).\{10\}/\10123456789/' file

使用相同的行标准替换第10列到行尾的所有内容:

sed '35,40s/^\(.\{9\}\).*/\10123456789/' file

答案 1 :(得分:1)

对于(1):

awk 'NR >= 35 && NR <= 40 {start = substr($0, 1, 9) ; end = substr($0, 20); print start "0123456789" end}'

对于(2):

awk 'NR >= 35 && NR <= 40 {start = substr($0, 1, 9) ; print start "0123456789"}'

在这两种情况下,我们只是简单地使用你的'0123456789'字符串并添加其余内容。唯一的区别是第二个只需要行的开头。