Рекурсивно строка замены в файлах

Хорошее горе. У меня была эта проблема на одном компьютере, находя, что NetworkManager поместил 192.168.1.251 как сервер имен в/etc/resolv.conf даже при том, что моя вся сеть является 192.168.0.0/24. Мое предположение было то, что это имело отношение к полю NetGear WNC2001 Wifi, я включил порт Ethernet того поля Linux. Но затем сегодня, при работе над Windows XP на используемом T60p я просто купил, я нашел, что это правильно получило IP-адрес от моего беспроводного маршрутизатора, но что он установил сервер DNS на 192.168.1.251!! № WNC2001 на этом поле. Походивший большое совпадение, что два полностью различных компьютера в моей сети так или иначе неправильно установили бы свой сервер DNS на 192.168.1.251! Я сделал "ipconfig/, возобновляют" на поле Windows, и оно правильно установило серверы DNS на данных ему моим маршрутизатором (D-Link DIR-628). Я решил искать "DNS 192.168.1.251" и нашел этот сайт. Это - первый сайт, который я проверил. Мне очень любопытно. Проверит несколько других хитов.

3
22.03.2012, 18:28
2 ответа

Также можно использовать, находят для этого:

find /your/path -type f -exec grep -l 'page_path\\' {} \; -exec sed -i 's#page_path\\#page_path/#g' {} \;

Второе должностное лицо будет выполняться, только если первый был, успешно выполняются, и Вы не получите проблемы с непечатным или символами необходимости Escape в именах файлов.

3
27.01.2020, 21:11
  • 1
    Почему Вы используете grep с -l здесь вместо -q ? –  don_crissti 01.08.2016, 14:36
  • 2
    только для указания на список файлов, которые были изменены. но -q также опция :) –  rush 01.08.2016, 19:16

С grep | xargs, Вы получаете проблемы с пробелами в именах файлов. Можно избежать этой проблемы при помощи: grep -lZr ... | xargs -0 sed ... который использует нулевые байты в качестве разделителя.

И теперь относительно команды sed: прием - то, что можно использовать вместо s/a/b/ любой другой символ, например. s#a#b#:

 sed -i 's#page_path\\#page_path/#g'
5
27.01.2020, 21:11
  • 1
    К ВАШЕМУ СВЕДЕНИЮ, grep имеет a -Z опция для разграниченных пустым указателем имен файлов, таким образом, grep -Z ... | xargs -0 ... общепринятый путь состоит в том, чтобы сделать это. –  Kevin 21.03.2012, 20:26
  • 2
    , не знал, что любой символ мог работать разделителем в sed –  Anthony Elliott 22.03.2012, 15:39

Теги

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