2016-04-29 78 views
-2

我想跨度標籤的內容複製在第31行,並把它放在第5行使用替換文件的行內容的sed,awk的等

輸入文件:

... 
<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> 
... 

非常感謝!

+0

改爲使用node.js。 – webb

回答

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是流編輯器,因此您必須運行兩次才能獲得結果 - 它們前進,而不是後退。

0

去舊學校。要更換5號線與線31的文件file.txt中的內容的內容,使用方法:

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

絕對不提供任何保證。使用風險自負。

1

awk來救援!如果你沒有一個HTML(或XML)認識工具,你可以試試下面的

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

掃描文件兩次,取決於嚴格給出的格式,可以用做額外的工作更加穩健。