2016-03-08 87 views
-4

我用一個腳本工作線,打印類似的東西:如何避免打印在bash

Foo text1 
Bar text2 
Bar list text3 
... 
Foo text4 
Bar text5 
Bar list text6 
... 

我只在FooBar線感興趣,但不是在Bar list的。我一直在用grep,awk或sed搜索信息,但我總是打印行Bar list text3。有一個解決方案將輸出保存在一個文件中,然後使用sed刪除這一行,但我想知道是否有一種方法可以在不將輸出保存到文件中的情況下執行此操作。

+2

並且通過單個編輯,您已完全**改變了問題,使所有已給出的答案無效。 – DevSolar

+1

你說它沒有與'grep'一起工作,但不要說你已經嘗試過哪些是標準的SO。例如,我很確定'grep -v「Bar list」'會做到這一點。 –

+0

'sed'/^Bar list/d'file'? – 123

回答

1
grep -v -F "Bar list" <filename> 

隨着-v選項,grep僅列出行不匹配該模式。

使用-F選項,您告訴grep「模式」根本不是模式,而是固定字符串。

+0

我決定降低問題而不是回答問題,因爲OP甚至沒有說出他/她使用grep進行的嘗試。但是,您公平地回答+1。 –

+0

此外,我想'grep -v'會是另一個問題的重複。 –

+0

@ThibaultD。這是100%重複 – 123

2

頭是最直接的方式。如果您想了解一些關於awk或者sed:

awk 'NR<3' file 

sed '1,2!d' file 

head

head -n2 file 
+0

也許你應該考慮加入starightforward的方式,以防萬一別人會看到這個並想使用它。 –

+0

或者純粹的Bash解決方案:'IFS = read -r line1; IFS =讀取-r line2; printf'%s \ n'「$ line1」「$ line2」'或類似的東西'mapfile'。 –

+0

我已更新帖子。我忘了說它會以這種方式打印更多的行 – Oscar

0

這可能爲你工作(GNU SED):

sed -r '/^(Foo|Bar)\s+\S+\s*$/!d' file 

如果它不FooBar開始,有一個其他非空間模式,然後刪除該行。