Заменять слова в одинарных кавычках

Похоже, что репозиторий пакетов, из которого вы получаете обновления Kali, завершил последний цикл зеркалирования как раз в тот момент, когда человек, ответственный за пакеты Kali vim, занимался их обновлением.

В результате у вас теперь vim-runtimeверсия 2 :8.1.0875 -1, но vim-commonверсия 2 :8.1.0875 -2. Также похоже на ваш vimпакет также обновлен до 2 :8.1.0875 -2.

Вы можете попробовать сделать это:

apt-get --allow-downgrades install vim-gtk=2:8.1.0875-1 vim-common=2:8.1.0875-1 vim=2:8.1.0875-1

чтобы принудительно установить все vimпакеты на версию 2 :8.1.0875 -1. Затем подождите некоторое время (может быть, несколько часов, вплоть до дня или около того ), чтобы разрешить ваш пакет репозиторий, чтобы завершить еще один цикл зеркального отображения, а затем повторите попытку обновления.

Если это не решит проблему,может быть проблема в зеркале репозитория пакетов, которое вы используете. Проверьте /etc/apt/sources.listи/или файлы в каталоге /etc/apt/sources.list.d/на наличие имени хоста используемого зеркала apt и переключитесь на другой зеркальный репозиторий Kali и/или свяжитесь с администратором зеркального сервера репозитория и сообщите о проблеме.

Список официальных зеркал сервера репозитория Kali можно найти здесь.

1
03.06.2020, 15:27
1 ответ

Здесь можно использовать двойные кавычки:

$ sed "s/'[^']*'/\"verified\"/g" ip.txt
Haarlem -m "verified" -n "verified" aalsmeer > "goes to"
Roterdam -m "verified" -n "verified" amsterdam > "goes to" 
  • '[^']*'соответствует ', за которым следуют не 'символы и снова 'символ
    • вы не можете использовать '.*', потому что это будет соответствовать от первого 'до последнего 'в строке ввода
  • \"verified\"использовать "verified"в качестве строки замены, двойные кавычки экранированы, потому что они используются внутри двойных кавычек

См. также:https://mywiki.wooledge.org/Quotesи Почему мое регулярное выражение работает в X, но не в Y?(для разницы между регулярным выражением и подстановочными знаками)


Вопрос был обновлен после вышеуказанного решения.

$ cat ip.txt
Haarlem -m 'foo' -n 'bar' aalsmeer > "goes to" -t 'value'
Roterdam -m 'foo2' -n 'bar2' amsterdam > "goes to" -t 'value'

$ sed -E "s/(-[mn] )'[^']*'/\1\"verified\"/g" ip.txt
Haarlem -m "verified" -n "verified" aalsmeer > "goes to" -t 'value'
Roterdam -m "verified" -n "verified" amsterdam > "goes to" -t 'value'
  • -[mn]будет соответствовать либо -m, либо-n
  • (-[mn] )— это группа захвата, совпадающий контент повторно используется в разделе замены как\1

Вы также можете использовать

sed -E "s/(-[^t] )'[^']*'/\1\"verified\"/g" ip.txt

для предотвращения замены только -t '..'и сопоставления всех других шаблонов с одинарными кавычками, которым предшествует -<char>и пробел

4
18.03.2021, 23:30

Теги

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