Я пытался найти ключевое слово (ячейка (edita)) в длинном файле (input.txt), который содержит более 10000 строк и разных имен ячеек, таких как ячейка (noedit), ячейка (editb). для контакта (q) (2-й случай) добавьте строку «класс», контакт (yz) (2-й случай) и добавьте «доску». Я не должен манипулировать блоком ячейки (noedit) .
МОЙ input.txt
cell (edita) {
test{
pin (Q) {
zzzzzz
}
pin (yz) {
zzzzz
}
}
pin (Q) {
add
}
pin (yz) {
add
}
}
cell (noedit) {
test{
pin (Q) {
zzzzzz
}
pin (yz) {
zzzzz
}
}
pin (Q) {
add
}
pin (yz) {
add
}
}
cell (editb) {
test{
pin (Q) {
zzzzzz
}
pin (yz) {
zzzzz
}
}
pin (Q) {
add
}
pin (yz) {
add
}
}
мой output.txt должен выглядеть так
cell (edita) {
test{
pin (Q) {
zzzzzz
}
pin (yz) {
zzzzz
}
}
pin (Q) {
"class";
add
}
pin (yz) {
board;
add
}
}
cell (noedit) {
test{
pin (Q) {
zzzzzz
}
pin (yz) {
zzzzz
}
}
pin (Q) {
add
}
pin (yz) {
add
}
}
cell (editb) {
test{
pin (Q) {
zzzzzz
}
pin (yz) {
zzzzz
}
}
pin (Q) {
"class";
add
}
pin (yz) {
board ;
add
}
}
Я попытался написать sed, который работает только в том случае, если файл имеет контактный вывод (т. Е. Нет строки cell (a)), и даже он манипулирует только вторым вхождением
sed '/\spin\s(Q)/ enjp;s/./1/;H;g;/^(\n1) enj2 broadcast$/s// class ; / p; d} 'input.txt
sed '/\spin\s(y)/ enjp;s/./1/;H;g;/^(\n1) enj2 coming$/s// board; / p ; d} 'input.txt
Пожалуйста, кто-нибудь может помочь мне найти клетку и затем манипулировать.
Заранее спасибо