2014-06-13 5 views
-2

Я сначала ищу ключевое слово и как только это ключевое слово находится в файле из этой конкретной строки, я предполагаю удалить до конца файла.Передача переменной этой команде sed

#! /bin/csh -f 
set sa = `grep -n -m 1 "^Pattern" file` 
set s = `echo "$sa" | cut -d':' -f1` 
set m = `sed '$s,$d' file | tee see > /dev/null` 

так первая линия дает мне соответствующую строку с номером строки, второй строкой я получаю номер строки и третью строкой я пытаюсь удалить из строки $ скажет 20 до последнего, но он не работает. Я пробовал все комбинации, но не принимает переменную $ s. Пожалуйста помоги.

+3

Вы знаете, что переменные расширяются только внутри двойных кавычек, а не внутри одинарных кавычек, не так ли? Это Shell Scripting 101. – Barmar

+0

Я уже пробовал, но тогда он не идентифицирует $ d. – user2508758

+0

Почему вы отметили это 'bash', когда используете' csh'? – Barmar

ответ

1

Вам необходимо взять $s из кавычек, чтобы он был расширен.

set m = `sed $s',$d' file | tee see > /dev/null` 
+0

Извините за пометку bash. Это сработало. На самом деле это одна из нескольких частей сценария, которую я реализую в csh. – user2508758

2

Но вы можете сделать это гораздо проще с одной линией sed:

sed -n '/SEARCHPATTERN/q;p 
  1. -n говорит, чтобы не печатать линии
  2. /SEARCHPATTERN/q выходов на схеме поиска
  3. ;p иначе напечатать линии
+0

спасибо человеку. Это также сработало для меня. – user2508758

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