При использовании переменной в sed она заменяет всю строку, а не только совпадающую строку

Предполагая, что вы просто хотите найти любой файл, чье имя совпадает с *~или .*~(, это обычно файлы резервных копий, оставленные редактором ), тогда этот единственный вызов findсделает это за вас :

. ]
find /var/www/html/mypath/ -type f \( -name '*~' -o -name '.*~' \) -print 

Вы можете вставить туда -maxdepth 6, если считаете, что это имеет смысл:

find /var/www/html/mypath/ -maxdepth 6 -type f \( -name '*~' -o -name '.*~' \) -print 

Чтобы удалить найденные файлы, просто добавьте -deleteв конец команды.


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

0
20.11.2019, 19:30
1 ответ

Предположим, что $arg2установлено на host1и $arg3установлено на 10.10.10.10, тогда обе ваши команды sedудалят host1из вывода.

Проблема в том, что вы сопоставляете 192.168.10.*, .*в конце будет соответствовать чему угодно до конца строки и заменит его на 10.10.10.10.

Попробуйте:

arg2=host1
arg3=10.10.10.10
sed "/${arg2}/ s/192\.168\.10\.[0-9]\+/${arg3}/" /path/to/file 
1
28.01.2020, 02:38

Теги

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