這工作而不precounting文件中的行的數目:
sed -ni '1{p;b}; 2{N;N;N;N}; $p; $!{N;s/^/word /;P;D}' filename
此緩衝器五線,使在第一行的置換在緩衝器和打印和刪除它。當讀取文件中的最後一行時,將打印緩衝區而不進行任何替換。
1{p;b}
- 讀取第一行,打印不變,並分支到結束
- - 當讀取第2行,追加四個線,以創建一個五線緩衝器
$p
- 當文件的最後一行被讀取,打印仍在緩衝區不變
$!
線 - 在當前行不是文件中的最後一行...
N
- 下一行追加到緩衝區( PATT ERN空間)
s/^/word /
- 讓第一線替代的緩衝
P
- 只打印在緩衝區
D
第一線 - 只刪除緩存中的第一行
請注意,對於包含少於6行的文件,這將無法正常工作。
這是使用AWK同樣的想法:
awk 'FNR == 1 {print; next} FNR == 2 {for (ptr = 0; ptr <= 4; ptr++) {buffer[ptr] = $0; getline}; ptr = 0} {sub(/^/, "word ", buffer[ptr]); print buffer[ptr]; buffer[ptr] = $0; ptr = (ptr + 1) % 5} END {for (i = 0; i <= 4; i++) {print buffer[(ptr + i) % 5]}}' filename > outputfile
mv outputfile filename
這是破了多條線路:
FNR == 1 {
print
next
}
FNR == 2 {
for (ptr = 0; ptr <= 4; ptr++) {
buffer[ptr] = $0
getline
}
ptr = 0
}
{
sub(/^/, "word ", buffer[ptr])
print buffer[ptr]
buffer[ptr] = $0
ptr = (ptr + 1) % 5
}
END {
for (i = 0; i <= 4; i++) {
print buffer[(ptr + i) % 5]
}
}
'sed -i'不能就地插入。它創建一個新文件。 –
命令sed -i「s/^/word \ t /」文件名將在名爲「文件名」的文件的每一行的開始處添加文本「單詞」,後跟一個製表符,至少這是最終的結果,結果。 – user866937
這感覺更像是一個「編程任務」,而不是「編程問題」。這味道很有趣,我不會吃它! –