Sed обработал дисплеи файла по-другому в vi по сравнению с кошкой

Я не знаю, являются ли оболочкой сервера, в которую Вы входите, исходные Korn Shell, но если так, можно изменить конец pbsu сценарий так, чтобы

   [ -n "$REMOTEHOST" ] && /usr/local/bin/pbrun -h $REMOTEHOST -u $USERNAME /usr/local/bin/pbksh $LOGIN_SWITCH
   [ -n "$REMOTEHOST" ] || /usr/local/bin/pbrun -b -u $USERNAME /usr/local/bin/pbksh $LOGIN_SWITCH

становится

   [ -n "$REMOTEHOST" ] && /usr/local/bin/pbrun -h $REMOTEHOST -u $USERNAME /usr/local/bin/pbksh $LOGIN_SWITCH ${@:2}
   [ -n "$REMOTEHOST" ] || /usr/local/bin/pbrun -b -u $USERNAME /usr/local/bin/pbksh $LOGIN_SWITCH ${@:2}
.

Затем Вы смогли бы просто отправить команды на сервер, не входя в оболочку, с помощью

pbsu - sftwrk01 -c "your commands here"

(Следите за кавычками!) Так, для Вашего примера, это было бы

pbsu - sftwrk01 -c "ls -lrt var/can/log"

(Заметьте, между прочим, что Вы не должны изменяться на некоторый каталог для списка его содержания - просто дают название того каталога к ls команда, как показано выше.)

3
09.10.2012, 19:42
3 ответа

Каждая строка файла содержит строку

^M     1

дважды. Таким образом,

<carriage-return><tab>1
^M^I1
\r\t1

(Это - три различных представления тех же управляющих символов),

Когда это отправляется непосредственно на Ваш терминал, как cat сделает, терминал интерпретирует это как инструкцию попятиться к началу строки, отодвинуться 8 символов и отобразить a 1.

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

После изменения префикса от scaffold кому: scaffold_, дополнительное 1 теперь обнаруживается по _, таким образом, теперь Вы заметили его.

Когда Вы открываете файл в vi или emacs, редактор не интерпретирует <carriage-return> упорядочьте тот же путь, но вместо этого отображает его.

Я предполагаю, что Вы не хотите <carriage-return><tab>1 строки в Вашем файле. Можно удалить их с sed:

sed -i 's/\r\t1//g' myfile

Относительно Ваш "Я не могу доверять своим глазам" комментарий - начиная с изменения управляющих последовательностей, как вещи отображены, да, они могут сбивать с толку. Один способ просмотреть вещи более ясно с cat -v и -T опции:

-v, --show-nonprinting   use ^ and M- notation, except for LFD and TAB
-T, --show-tabs          display TAB characters as ^I
-t                       equivalent to -vT

Например:

$ cat myfile
scaffold1test
$ cat -t myfile
scaffold_hello^M^I1
7
27.01.2020, 21:17

^M возврат каретки.

можно использовать dos2unix <file> разделять ключи DOS из Вашего файла

-1
27.01.2020, 21:17
  • 1
    dos2unix преобразует окончания строки из CRLF кому: LF. Существуют нет CRLF последовательности в этом файле; просто пустой CRS (не в конце строк). –  Jim Paris 09.10.2012, 20:57
  • 2
    , как Вы знали что только путем рассмотрения выборки от его вывода? –  h3rrmiller 09.10.2012, 21:02
  • 3
    Из того, что он скопировал из vi и less. Они показали пустое CRs непосредственно посреди строк. Кроме того, это полностью объясняет поведение, которое он видит. –  Jim Paris 09.10.2012, 21:04

Если Вы не имеете dos2unix, можно сделать это с sed :

sed -i 's/\r//g' <THE FILE NAME>

Это удалит все возвраты каретки.

-1
27.01.2020, 21:17
  • 1
    Эта команда не эквивалентна dos2unix. dos2unix полосы CR от a CRLF; эта команда разделит CR везде. Но файл автора вопроса имеет больше, чем просто случайный CRs, таким образом, это оставит его с посторонним TAB и 1 символы также. –  Jim Paris 09.10.2012, 20:59

Теги

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