Как удалить специфичные для кода строки кода с использованием Unix - PullRequest
0 голосов
/ 27 февраля 2019

Может ли кто-нибудь помочь / посоветовать, как я мог удалить первые 4 строки и последние 2 строки кодов в моих 3 файлах JavaScript с помощью сценария оболочки?

Я пытался использовать это руководство: UNIX- удалить определенные строки , но это будет работать только для первых 4 строк.Все 3 файла Javascript имеют различный набор строк кода.

set -vx
lines2del="(1,2,3,4)"
sedCmds=${lines2del//,/d;}
sedCmds=${sedCmds/(/}
sedCmds=${sedCmds/)/}
sedCmds=${sedCmds}d
sed -i "$sedCmds" file

Любые входные данные высоко ценятся.Спасибо

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

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

sed -i '1,4d;N;$d;P;D' file

Это удаляет строки с 1 по 4, а затем печатает все остальные строки, кроме двух последних, которые оно также удаляет.

0 голосов
/ 27 февраля 2019
$ seq 10 | tail -n +5 | head -n -2
5
6
7
8

$ seq 10 | awk '{p3=p2; p2=p1; p1=$0} NR>6{print p3}'
5
6
7
8

$ seq 10 | awk '{p[NR%6]=$0} NR>6{print p[(NR-2)%6]}'
5
6
7
8

$ seq 10 | awk -v b=4 -v a=2 'BEGIN{t=b+a} {p[NR%t]=$0} NR>t{print p[(NR-a)%t]}'
5
6
7
8

$ seq 10 | awk -v b=3 -v a=5 'BEGIN{t=b+a} {p[NR%t]=$0} NR>t{print p[(NR-a)%t]}'
4
5
0 голосов
/ 27 февраля 2019

Добавьте следующее к вашему lines2del:

$(($(cat file | wc -l)-2))  // third last line
$(($(cat file | wc -l)-1))  // second last line
$(cat file | wc -l)         // last line
...