Вы пытались удалить его принудительно? Попробуйте этот вариант, если ваше имя файла верное:
rm -rf file.to.delete
sed -e '
1N # get 2nd line in pattern space
$!N # get 3rd line in pattern space
/\ncreate table "sacro"\.issue$/P # if the last portion of matches, show 1st portion
D # strip 1st portion & reapply sed code on what
# remains of the pattern space
' test.txt
grep -B 2 'create table "sacro"\.issue$' test.txt | sed q
Во-первых, нет причин, по которым grep
нельзя это сделать. Да, и обратите внимание, что cat
вам не нужен, как grep
, так и awk
могут принимать имена входных файлов:
$ grep -xB2 'create table "sacro".issue' file
{ unload file name = issue00106.unl number of rows = 74 }
create table "sacro".issue
Итак, если вам нужна только первая строка, сделайте:
$ grep -xB2 'create table "sacro".issue' file | head -n1
{ unload file name = issue00106.unl number of rows = 74 }
-x
означает «совпадение со всей строкой», что гарантирует, что строка create table "sacro".issue_category
не будет напечатана. -B2
означает «распечатать также 2 предыдущие строки».
Вы также можете сделать это в awk
по запросу:
$ awk -vs='create table "sacro".issue' '($0==s){print b2}{b2=b1; b1=$0}' file
{ unload file name = issue00106.unl number of rows = 74 }