在适当的位置替换Sed

时间:2018-06-15 17:23:08

标签: string sed replace

我有一个像

这样的文本文件
Firstline
Sometext1 commontext
Sometext2 commontext
Sometext3 commontext
Sometext4 commontext
.
.
.
lastline

预期输出

cp $1 $1_original
sed '1d;$d' $1 > output_interim.txt;
awk '{gsub (substr($0,10,10),"commontext",$0); print $0 }' output_interim.txt > output.txt;
(head -1 $1_original; cat output.txt; tail -1 $1_original) > $1;

排除第一行和最后一行,对于位置范围(如location10到位置20)的所有行,我在此范围内有要替换的常用文本

如何使用sed替换来实现这一目标?

目前我正在接受除了第一个和最后一个文件之外的所有行,在这个文件上我正在运行awk gsub(起始位置,偏移量) 我将filename作为参数传递给脚本

{{1}}

1 个答案:

答案 0 :(得分:0)

假设GNU sed(-r选项)

在这里,我将“location11”替换为“location17”,文本为“common” - 保存前10个字符并替换接下来的6个字符:

sed -r '1n; $n; s/^(.{10}).{6}/\1common/' <<END
Firstline
Sometext1 randomtext1
Sometext2 randomtext2
Sometext3 randomtext3
Sometext4 randomtext4
.
.
.
lastline
END
Firstline
Sometext1 commontext1
Sometext2 commontext2
Sometext3 commontext3
Sometext4 commontext4
.
.
.
lastline

然后,要使用备份副本就地编写,请将-i.bak选项添加到sed。