2011-03-08 55 views
54

我有一個是由幾行文本文件:如何從匹配行後面開始刪除文件中的所有行?

The first line 
The second line 
The third line 
The fourth line 

我有一個字符串,它是行之一:The second line

我要刪除的字符串和之後的所有行在文件中,除字符串外,它將刪除The third lineThe fourth line。該文件將成爲:

The first line 

我搜索了對谷歌的解決方案,它似乎是我應該使用sed。喜歡的東西:

sed 'linenum,$d' file 

但如何找到字符串的行號?或者,我該怎麼做呢?

+0

您的問題聲明是矛盾的:「我想刪除所有行** **後行」意味着你只是刪除兩行(如你所說),但後來你的輸出示例顯示匹配線爲失蹤太。你究竟想要什麼? – 2011-03-08 01:58:39

+0

匹配線和它後面的所有線。我應該提高我的英語水平。感謝你的信息。 – DocWiki 2011-03-08 19:24:24

回答

84

如果你不希望打印匹配的行(或任何以下行):

sed -n '/The second line/q;p' inputfile 

這是說「當你到達與模式退出匹配的行時,否則打印每一行「。 -n選項可防止隱式打印,並且需要使用p命令才能明確地打印行。

sed '/The second line/,$d' inputfile 

這是說「刪除輸出開始匹配行,並繼續在文件的結尾都行」。

但第一個更快。但是它會完全退出處理過程,所以如果您有多個文件作爲參數,那麼第一個匹配文件之後的那些文件將不會被處理。在這種情況下,刪除表單更好。

如果你想打印匹配行,但不是任何以下行:

sed '/The second line/q' inputfile 

這是說「打印所有行,並在達到匹配線時退出」(下-n選項(隱式印刷) 未使用)。

請參閱man sed瞭解更多信息。

+3

但是有些命令對於破損的管道(例如RCS'co -p')會產生焦慮,然後用'sed'/第二行/,$ d''表示法更好。 – 2011-03-08 01:56:26

+0

你可以請添加解釋嗎? – 2017-06-01 14:00:04

+0

@AhmadAbdelghany:解釋補充。 – 2017-06-01 16:10:59

5
sed '/The second line/q0' file 

或者,沒有GNU的sed:

sed '/The second line/q' file 

或者用grep:

grep -B 9999999 "The second line" 
+0

非常感謝!你能告訴我如何找到特定字符串的行號,但我仍不知道。 – DocWiki 2011-03-08 01:29:28

+0

grep -n「第二行」文件| awk -F:'{print $ 1}' – Erik 2011-03-08 01:31:22

+0

@DocWiki:你不需要行號;你搜索它。 'sed「/ $ string /,\ $ d」inputfile'。 – 2011-03-08 02:00:36

0

首先添加行號,並用awk刪除線

cat new.txt 
The first line 
The second line 
The third line 
The fourth line 

cat new.txt | nl 
    1 The first line 
    2 The second line 
    3 The third line 
    4 The fourth line 



cat new.txt | nl | sed "/2/d" 
    1 The first line 
    3 The third line 
    4 The fourth line 

cat new.txt | nl |sed "3d;4d" 
    1 The first line 
    2 The second line 

awk 'NR!=3 && NR!=4' new.txt 
The first line 
The second line 
4

用awk(不顯示匹配行)

awk '/pattern/ {exit} {print}' file.txt 
0
awk '/The second line/{exit}1' file 
15

這比其他給定的解決方案稍短。 使用大寫Q退出可避免打印當前行。

sed '/The second line/Q' file 

要實際刪除行,可以使用相同的語法。

sed -i '/The second line/Q' file 
+1

這是我最喜歡的解決方案。 – TryTryAgain 2016-06-01 23:08:53

相關問題