使用sed,awk等替换文件中的行内容

时间:2016-04-29 13:24:47

标签: bash awk sed cut

我想复制第31行中span标记的内容并将其放在第5行。

输入文件:

...
<h1> 
    This is line 5, and it is a default string for all files
</h1>
  ...
  ...
<span id="foo"> This is line 31, different in every file </span>
...

输出文件:

...
<h1>
   This is line 31, different in every file
</h1>
   ...
   ...
<span id="foo"> This is line 31, different in every file </span>
...

非常感谢!

3 个答案:

答案 0 :(得分:1)

awk救援!如果您没有html(或xml)识别工具,可以尝试以下

awk -F'[<>]' 'NR==FNR{if(NR==31)line=$3; next}
               FNR==5{$0=line}  1' file{,}

扫描文件两次,严格依赖于给定的格式,可以通过额外的工作使其更加健壮。

答案 1 :(得分:0)

如果您正在编写脚本,可以这样做

in_file=$1
out_file=output.txt

line=$(sed -n '31p' $in_file)
sed '5c'"$line"'' $in_file >$out_file

既然你想要sed,就可以在bash脚本中使用sed来实现它。由于sed和awk是流编辑器,因此您必须运行它们两次以获得结果 - 它们继续前进,而不是返回。

答案 2 :(得分:0)

去上学。要使用文件file.txt中第31行的内容替换第5行的内容,请使用:

printf '31y\n5x\n5d\nw\n' | ed file.txt

绝对不提供任何保证。使用风险自负。