2013-04-17 2 views
0

я должен был добавить в мой nrpe.cfg файл этой линии, в более чем 200 серверов:Как найти дублируемую [s] строку [s] и удалить ее?

command[check_utc]=/company/nrpe/libexec/check_utc.sh 

Но для некоторых проблем, некоторые машины имеют более чем один раз этой линии. Поэтому теперь я хотел бы проверить, есть ли несколько раз и удалить его, оставив только одну строку с указанной командой. Мне нужно сделать это в скрипте shell.

+0

Они не являются причастниками Стивена. –

ответ

1

Метод 1: Ликвидировать все повторяющиеся строки

cat filename | sort | uniq > outfile 
    mv outfile filename 

The | символов питающие выход команд на левой в команды справа, как вход.

Команда cat считывает содержимое файла на стандартный вывод (экран или другой файл)

Команда sort сортирует выход в алфавитном порядке, который необходим, прежде чем использовать uniq ...

uniq команда устраняет смежно повторяющиеся значения

> outfile записывает вывод последнего шага в файл с именем «выходной_файл»

Команда mv заменяет оригинальный файл с новым файлом данных Outfile

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

Метод 2: Удалите все экземпляры конкретной линии, а затем повторно добавить один раз

cat filename | sed 's/command\[check_utc\]\=\/company\/nrpe\/libexec\/check_utc.sh//' > outfile 
    mv outfile filename 

Команда sed позволяет строковые замены должны быть выполнены на конкретных моделей струн. формат для такой команды: sed 's/find/replace/', чтобы найти первый экземпляр «найти» в каждой строке и заменить его на «заменить». Для того, чтобы заставить его работать на каждом конкретном случае в каждой строке вы добавляете «г» до конца, то есть sed 's/find/replace/g'

В \ символы заставляют sed буквально интерпретировать специальные символы в строке, которые иначе были бы неправильно, как специальные инструкции.

Команда выше будет полностью удалить все экземпляры этой конкретной строки (заменяющие его ни с чем), которые вы затем должны следовать с редактированием кода и добавить его обратно в один раз

Способ 3: Удалить все экземпляры, а затем вновь автоматически добавляются в конец файла

cat filename | sed 's/command\[check_utc\]\=\/company\/nrpe\/libexec\/check_utc.sh//' > outfile 
    mv outfile filename 
    echo "command[check_utc]=/company/nrpe/libexec/check_utc.sh" >> filename 

Это тот же код, как описано выше, но после удаления всех экземпляров строки, можно использовать echo для печати строки и использовать >> для добавления текст до конца t он содержимое файла

+0

Этот файл представляет собой файл конфигурации, как указано в нем, 'nrpe.cfg', поэтому строки не смежны, и я должен хранить файл как есть, поэтому любая строка будет изменена, просто удалите дублируемую строку. И добавьте его в конце. Спасибо за ваш ответ! –

+1

F.Y.I. Я случайно включил \ в команду эха, они печатаются буквально эхом и должны быть исключены. Вы можете дважды проверить свой файл cfg, чтобы убедиться, что они не были включены в текст. Я соответствующим образом изменил код. – CaffeineConnoisseur

0

Если линии не смежны, и вы не против их сортировки, это сработает.

$ cat foo.txt 
wings of fire 
this is a test 
food that are killing you 
this is a test 

Результат

$ sort -u foo.txt 
food that are killing you 
this is a test 
wings of fire 
Смежные вопросы