sed - это правильный инструмент для выполнения s / old / new, , то есть все .То, что вы пытаетесь сделать, это не так, почему вы пытаетесь заставить sed сделать что-то, когда есть гораздо более подходящие инструменты, которые могут сделать работу намного проще?
Правильный способ сделать то, что ваш сценарий:
#retrieve first matching line number
index=$(sed -n "/$choice/=" "$PWD$DEBUG_DIR$DEBUG_MENU")
#delete matching line plus next line from file
sed -i "/$index[1], (( $index[1]++))/"
"$PWD$DEBUG_DIR$DEBUG_MENU"
, кажется, пытается это сделать:
awk -v choice="$choice" '$0~choice{skip=2} !(skip&&skip--)' "$PWD$DEBUG_DIR$DEBUG_MENU"
Например:
$ seq 20 | awk -v choice="4" '$0~choice{skip=2} !(skip&&skip--)'
1
2
3
6
7
8
9
10
11
12
13
16
17
18
19
20
, если вы хотите удалить только первое совпадение:
$ seq 20 | awk -v choice="4" '$0~choice{skip=2;cnt++} !(cnt==1 && skip && skip--)'
1
2
3
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
или 2-й:
$ seq 20 | awk -v choice="4" '$0~choice{skip=2;cnt++} !(cnt==2 && skip && skip--)'
1
2
3
4
5
6
7
8
9
10
11
12
13
16
17
18
19
20
и пропустить 5 строк вместо 2:
$ seq 20 | awk -v choice="4" '$0~choice{skip=5} !(skip&&skip--)'
1
2
3
9
10
11
12
13
19
20
Просто используйте правильный инструмент для правильной работы, донкопать ямы, чтобы сажать деревья чайной ложкой.