удаление {^ D ctrl + d} мусора из файла с помощью оболочки - PullRequest
0 голосов
/ 19 октября 2018

Я использую сценарий shell & TCL для входа в систему на коммутаторе и получения выходных данных определенных команд, а в некоторых местах я вижу, что появляется ^D.Я пытался использовать утилиту dos2unix, но она все равно не исчезла.

Eth1/37       NOM:               xcvrAbsen routed    auto    auto    --
^DEth1/38       NOM:               xcvrAbsen routed    auto    auto    --
Eth1/39       NOM:               xcvrAbsen routed    auto    auto    --

Eth101/1/45   eth    1000    NOM:NO_PATCHING CABLE
^DEth101/1/46   eth    1000    NOM:NO_PATCHING CABLE
Eth101/1/47   eth    1000    NOM:NO_PATCHING CABLE

Как это можно устранить, существуют ли какие-либо стандартные инструменты, такие как dos2unix, которые могут избавиться от таких данных?

То, что я пытаюсь сделать, - это сравнить два файла одного и того же коммутатора и одну и ту же команду и один и тот же вывод, но из-за этих ^D Vimdiff показывает его в виде разных строк.

Как устранить это?

Используемая мной команда выглядит примерно так:

$cdir/ciscocmd -Y -u $operator -p $password -s $password -t $switch -r rfc_sa_commands | sed 's/^^D//' > $switch.$NOW

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

dos2unix удаляет возврат каретки, никаких других управляющих символов.

Инструмент для удаления всех вхождений произвольного символа называется tr.

tr -d '\004' <inputfile >outputfile

Предполагается, что у вас естьбуквенные символы ctrl-D, а не последовательности кареток ^ и D.Утилита tr не может удалить определенную последовательность;он просто обрабатывает отдельные символы.Чтобы удалить последовательность, вам понадобится

sed 's/\^D//g' inputfile >outputfile

, где требуется обратная косая черта, поскольку одна каретка имеет особое значение в регулярных выражениях (соответствует началу строки).Удвоение этого не ускользает от него;^^ вероятно, все еще соответствует началу строки, хотя оно не очень четко определено и может вводить случайное поведение.

0 голосов
/ 19 октября 2018

Даже если специальный символ отображается как «^ D», он НЕ может быть пойман подобным образом.

Интересные показания:

Я думаю, что способ сделать это будет:

<your command>|sed -e 's/\x04//g'

Решает ли это вашу проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...