無論文件長度如何,我都想用sed操作文件的最後7行。SED:無論文件長度如何,最後七行操作
根據related question這種類型的範圍將無法正常工作:$-6,$ {..commands..}
什麼等價即會是什麼?
無論文件長度如何,我都想用sed操作文件的最後7行。SED:無論文件長度如何,最後七行操作
根據related question這種類型的範圍將無法正常工作:$-6,$ {..commands..}
什麼等價即會是什麼?
你可以只從sed的(1)ED(1),該命令是差不多的切換
tail -7 test.txt | sed -e "s/e/WWW/"
更多信息。在這種情況下,命令與相同,但地址範圍沒有限制。
$ cat > fl7.ed
ed - $1 << \eof
1,7s/$/ (one of the first seven lines)/
$-6,$s/$/ (one of the last seven lines)/
w
q
eof
$ sh fl7.ed yourfile
perl -lne 'END{print join$\,@a,"-",@b}[email protected],$_ [email protected]<6;[email protected],$_;[email protected] [email protected]>7'
在END{}
塊你可以做任何要求; @a
包含前6行,@b
最後7行請求。
這應該爲你工作:
sed '1{N;N;N;N;N};N;$s/foo/bar/g;P;D' inputfile
說明:
1{N;N;N;N;N}
- 當第一行被讀取時,有五個多線負載模式空間(總:6在這一點上)N
- 追加另一行$s/foo/bar/g
- 當讀取最後一行時,對en執行一些操作模式空間的輪胎內容(文件的最後七行)。操作可能比這裏顯示P
更復雜的 - 第一個換行符之前打印的測試圖案空間D
- 刪除剛剛打印和循環到腳本(下稱「追加另一條線」的步驟開始的文字 - 第一個指令被跳過,因爲它僅適用於第一行的文件中)這可能會爲你工作:
sed ':a;1,6{$!N;ba};${s/foo/bar/g;q};N;D' file
說明:
:a
1,6{$!N;ba}
${s/foo/bar/g;q}
N
D
(a)你不能 - 'sed`是這項工作的錯誤工具。 (b)如果你不夠堅持,可以探索保持空間和模式空間,並嘗試在保持空間中保留7條線(或者6條線),然後在模式空間滿足時處理保持空間最後一行。但是這非常困難 - 我真的不打擾(我用`sed`完成了可怕的事情,但是有一點可以爲你選擇正確的工具)。 – 2011-01-23 22:16:36