所以我有一個文件,我想剪掉它的前33行和最後6行。我想要做的是在cat命令(cat文件)中獲取整個文件,然後使用「head」和「tail」命令刪除這些部分,但我不知道如何去做。 EG(這只是想法)Shell腳本剪切文件的開頭和結尾
cat file - head -n 33 file - tail -n 6 file
我應該怎麼做呢?是否有可能用「sed」(如何)做到這一點?提前致謝。
所以我有一個文件,我想剪掉它的前33行和最後6行。我想要做的是在cat命令(cat文件)中獲取整個文件,然後使用「head」和「tail」命令刪除這些部分,但我不知道如何去做。 EG(這只是想法)Shell腳本剪切文件的開頭和結尾
cat file - head -n 33 file - tail -n 6 file
我應該怎麼做呢?是否有可能用「sed」(如何)做到這一點?提前致謝。
這可能是你想要什麼:
$ tail -n +34 file | head -n -6
見的,而不是過去的10 tail
-n,--lines = K 輸出的最後K線;或使用-n + K到輸出開始的行第K個
和head
-n,--lines = [ - ]ķ 打印第一K行,而不是第一個10;與領先的' - ',打印每個文件的所有,但最後K行
手冊頁。
例子:
$ cat file
one
two
three
four
five
six
seven
eight
$ tail -n +4 file | head -n -2
four
five
six
請注意,您不需要cat
(見UUOC)。
第一計數總線,然後打印中間部分:(讀文件兩次)
l=$(wc -l file)
awk -v l="$l" 'NR>33&&NR<l-6' file
或在陣列加載文件,然後打印線需要:(讀文件一次)
awk '{a[NR]=$0}END{for(i=34;i<NR-6;i++)print a[i]}' file
或頭部的awk,不想那麼多了這種方式:(讀文件兩次):
awk 'NR>33' file|head -n-6
sed -n '1,33b; 34{N;N;N;N;N};N;P;D' file
這將工作+
這可能會爲你工作(GNU SED):
sed '1,33d;:a;$d;N;s/\n/&/6;Ta;P;D' file
您可以刪除第33行用'sed'足夠容易:'sed的「1, 33d'文件'。 「sed」不能做的是從最後一行(或當前行)向後計數,所以'最後6行'部分不能用'sed'明智地解決。 (你可以通過握持空間和圖案空間進行非凡的旋轉,但是爲了你的理智,不要去探索它們。) – 2013-04-21 00:00:42
@JonathanLeffler它已經被'sed'回答了,沒有使用保持空間。但是,我明白你的觀點。 – 2013-04-21 00:10:26
@StevenPenny:我沒有在思想上做過'sed'腳本,是的,有一個解決方案適用於33和6的情況,只有模式空間(所以我過分複雜)。然而,推廣這個解決方案來處理25和20將是'sed'腳本生成中的一個混亂的練習,並且處理200和250不會考慮。從這個角度來看,使用'tail'去除除前N行和所有除最後M行之外的所有行都更好(至少你只需要調整一個整數值)。 – 2013-04-21 00:23:04