Я пытаюсь удалить набор строк из файла, передав переменные.

Ниже мой файл:

$ cat checking.txt
Starting1
DELETE /*+NESTED_TABLE_SET_REFS+*/ FROM tables1

Ending1

Starting2

update table

set col1=2
where val2=685

Ending2

Starting3

update table
set col1=1
where val1=44

Ending3

Поэтому в приведенных выше файлах мне нужно удалить строки с 1-й по 4-ю строку. Я использовал команду ниже, и она работала нормально.

sed '1,4d' checking.txt

Теперь я дал переменной a значение, например a=4

echo $a
4

Теперь я попробовал команду sed, например

sed "1,${a}d" checking.txt

sed: 0602-404 Function 1, 4d cannot be parsed.

Может кто-нибудь сказать мне, как передать здесь переменную?

Заранее спасибо

0
Vimruth 4 Окт 2018 в 16:58

1 ответ

Лучший ответ

Один из способов решения этой проблемы заключается в следующем. Предполагая, что вы хотите удалить строки между start и stop, вы можете написать

awk '(NR<start) || (stop<NR)' start=1 stop=4 file

То, как вы предлагаете это работать, тоже работает,

start=1
stop=4
sed "${start},${stop}d" file

Причина, по которой это не удалось в вашем случае, заключается в том, что перед переменной a есть пробелы. Вы заметили это по сообщению об ошибке и по пробелам перед цифрой 4.

0
kvantour 4 Окт 2018 в 14:14