Как grep-inverse-match и исключить строки «до» и «после»

GNU tar имеет параметр - delete , который в настоящее время работает и с архивами.

Используйте его, например, так:

tar -vf yourArchive.tar --delete your/path/to/delete

Осторожно: Скорее всего, не будет работать ни с какими магнитными лентами. Но tar не имеет проблем при работе в конвейере, поэтому вы можете просто использовать временный tar-файл и впоследствии перезаписать им ленту.Он также не будет работать со сжатыми файлами, поэтому вам придется распаковать файл.

Кроме того, операция в любом случае будет довольно медленной из-за (по замыслу) линейной природы упакованных tar-архивов.

27
24.05.2018, 11:30
1 ответ

Если есть только 1 совпадение:

A=1; B=2; n=$(grep -n 'fff' file.txt | cut -d: -f1)
head -n $((n-B-1)) file.txt ; tail -n +$((n+A+1)) file.txt

В противном случае (awk):

# -vA=a -vB=b -vpattern=pat must be provided
BEGIN{

    # add file again. assume single file
    ARGV[ARGC]=ARGV[ARGC-1]
    ++ARGC
}

# the same as grep -An -Bn pattern
FNR==NR && $0 ~ pattern{
    for (i = 0; i <= B; ++i)
        a[NR-i]++
    for (i = 1; i <= A; ++i)
        a[NR+i]++
}

FNR!=NR && !(FNR in a)
0
27.01.2020, 19:39

Теги

Похожие вопросы