2011-11-15 76 views
1

我有類似這樣的一個問題:刪除線從文件

ssadfsadfsdf 
asdfsadf 
asdfsadf 
asdfsadf 
asdfsdf 
1 z z z lkj klj lkj 
2 satan er kaerleikur lkj lkj lkj 
3 z z z 
4 asdflj asd sdf 
5 z z z 
6 asdf sdaf asdf 
7 z z z lkj lkj lkj 
8 sdf safd asdf 
9 z z z 

如果: Delete lines from file with SED or AWK

我怎麼能在這個文件刪除之間,與3和5開始行和一切答案顯然在別處我會刪除這個問題。

什麼,如果它看起來很喜歡這樣的:

asd  ssadfsadfsdf 
asd  asdfsadf 
asd  asdfsadf 
asd  asdfsadf 
asd  asdfsdf 
asd  1 z z z lkj klj lkj 
asd  2 satan er kaerleikur lkj lkj lkj 
asd  3 z z z 
asd  4 asdflj asd sdf 
asd  5 z z z 
asd  6 asdf sdaf asdf 
asd  7 z z z lkj lkj lkj 
asd  8 sdf safd asdf 
asd  9 z z z 

回答

4

可以使用一個awk 範圍圖案跳過線匹配模式1到模式2:

awk '$1 == 3, $1 == 5 { next }; { print }' INFILE 

我做字段$1而不是正則表達式的數值比較如因爲那也匹配'30','31'等。

如果數字是該行的第二個字段(如在您編輯的示例輸入中),只需更改$1$2。讓我知道這是否適合你。

+0

很好,悶悶不樂。 – AWE

+0

如果我想刪除某個數字下面的所有行,那麼我會這樣做:awk'$ 1 <5,{next}; {print}'INFILE這就是說,如果第一個字段是數字索引。 – AWE

3

快速谷歌給了我這個爲秒回答:

http://www.cyberciti.biz/faq/sed-howto-remove-lines-paragraphs/

$ sed '/WORD1/,/WORD2/d' input.txt > output.txt 

爲了確保它匹配 「行首」就像你說的那樣,你可以用^這個符號開始模式。

如果你使用的Vim(已使用sed內置),你可以做一個像range command

:/^3.*/,/^5.*/ d 

其中d是刪除命令,:/exp1/,/exp2/範圍。

1
awk '/^3/ {del=1} 
    (del==0) {print} 
    /^5/ {del=0}' FILE 
+0

作品,但也符合5個住宿開始,所以我把^ 6代替。 – AWE

+0

剛剛移動/^5 /匹配行之前(del == 0)條件 – Cougar

+0

在Mawk中,這將刪除所有行,並且包括以'5開頭的行。將「^ 5」移動一行使其保持該行。 –

0
awk '$2!~/^[3|5]/' yourFile 

會爲你做。

看到下面的測試:

kent$ echo "asd  ssadfsadfsdf 
asd  asdfsadf 
asd  asdfsadf 
asd  asdfsadf 
asd  asdfsdf 
asd  1 z z z lkj klj lkj 
asd  2 satan er kaerleikur lkj lkj lkj 
asd  3 z z z 
asd  4 asdflj asd sdf 
asd  5 z z z 
asd  6 asdf sdaf asdf 
asd  7 z z z lkj lkj lkj 
asd  8 sdf safd asdf 
asd  9 z z z"|awk '$2!~/^[3|5]/' 

輸出:

asd  ssadfsadfsdf 
asd  asdfsadf 
asd  asdfsadf 
asd  asdfsadf 
asd  asdfsdf 
asd  1 z z z lkj klj lkj 
asd  2 satan er kaerleikur lkj lkj lkj 
asd  4 asdflj asd sdf 
asd  6 asdf sdaf asdf 
asd  7 z z z lkj lkj lkj 
asd  8 sdf safd asdf 
asd  9 z z z 
+1

我解釋了這樣一個問題,即「4」行也應該刪除。 –

+0

是的,你將如何讓3和5,其間的一切消失。 Awk語法幾乎不是人類可讀的。 – AWE