2016-03-08 2 views
-4

Я работаю со скриптом, который печатает что-то подобное:Как избежать печатать строку в Баш

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

Я заинтересован только в Foo и Bar линий, но не в Bar list из них. Я искал информацию для этого с помощью grep, awk или sed, но я всегда печатаю строку Bar list text3. Существует решение, которое заключается в сохранении вывода в файле, а затем удалении строки с помощью sed, но мне было интересно, есть ли способ сделать это, не сохраняя вывод в файле.

+2

И с одним редактированием у вас есть ** полностью ** изменил вопрос, аннулировал все ответы, уже заданные. – DevSolar

+1

Вы говорите, что он не работал с 'grep', но не сказал, что вы пробовали, что является стандартом для SO. Например, я уверен, что список «grep -v» Bar «сделает это». –

+0

'sed '/^Список баров/d' файл'? – 123

ответ

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

С опцией -v, grep списки только строки не соответствие шаблон.

С опцией -F вы указываете grep, что «шаблон» не является шаблоном вообще, а фиксированной строкой.

+0

Я решил сфокусировать вопрос, а не отвечать на него, потому что OP даже не сказал, что он/она пробовал с grep. Но справедливо от вас, чтобы ответить так +1. –

+0

Кроме того, я бы предположил, что 'grep -v' будет дублировать другой вопрос. –

+0

@ThibaultD. Это 100% дубликат – 123

2

голова - самый простой способ. В случае, если вы хотите узнать что-то о SED или AWK:

awk 'NR<3' file 

или

sed '1,2!d' file 

для head:

head -n2 file 
+0

Возможно, вам стоит подумать о том, чтобы добавить звездный путь на случай, если другие увидят это и захотят его использовать. –

+0

Или для чистого решения Bash: 'IFS = read -r line1; IFS = read -r line2; printf '% s \ n' "$ line1" "$ line2" 'или подобный материал с' mapfile'. –

+0

Я обновил сообщение. Я забыл сказать, что он печатает больше строк таким образом. – Oscar

0

Это может работать для вас (GNU СЭД):

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

Если не начать с Foo или Bar и имеют один другой шаблон некосмическими затем удалить строку.

Смежные вопросы