Я нахожу команду bash для условной замены со смещением.Существующие сообщения, которые я нашел, это условная замена без смещения или фиксированное смещение.
Задача: Если uid
содержит 8964
, вставьтестрока FORBIDDEN
перед DOB
.
Каждый файл TXT, представленный ниже, представляет одного пользователя и содержит (в следующем порядке)
- некоторое свойство(е)
- уникальный
uid
- какой-то качество (ии)
- уникальный
DOB
- случайный lorem ipsum
Я надеюсь, что смогу преобразовать следующие файлы
# file1.txt (uid doens't match 8964)
admin: false
uid: 123456
happy
movie
DOB: 6543-02-10
lorem ipsum
seo varis lireccuni paccem noba sako
# file2.txt (uid matches 8964)
citizen: true
hasSEAcct: true
uid: 289641
joyful hearty
final debug Juno XYus
magazine
DOB: 1234-05-06
saadi torem lopez dupont
в
# file1.txt (uid doens't match 8964)
admin: false
uid: 123456
happy
movie
DOB: 6543-02-10
lorem ipsum
seo varis lireccuni paccem noba sako
# file2.txt (uid matches 8964)
citizen: true
hasSEAcct: true
uid: 289641
joyful hearty
final debug Juno XYus
magazine
FORBIDDEN
DOB: 1234-05-06
saadi torem lopez dupont
Моя попытка:
Если uid
содержит 8964
, выполните 2-е совпадение с DOB
и вставьте FORBIDDEN
выше DOB
.
sed '/^uid: [0-9]*8964[0-9]*$/{n;/^DOB: .*$/{iFORBIDDEN}}' file*.txt
Это дает мне непревзойденную {
ошибку.
sed: -e expression #1, char 0: unmatched `{'
Я знаю, что sed '/PAT/{n;p}'
выполнит {n;p}
, если PAT
соответствует, но кажется невозможным поместить /PAT2/{iTEXT}
внутрь /PAT/{ }
.
Как я могу выполнить такую вставку FORBIDDEN
?