Как Кусаланандасказал , любое значение меньше нуля неприемлемо для других пользователей, а любое значение больше нуля приятно для других пользователей. Я не смог найти документацию, в которой бы это было ясно, но вы можете увидеть это в исходном кодеprocps
:
.
if(pp->nice < 0) outbuf[end++] = '<';
if(pp->nice > 0) outbuf[end++] = 'N';
Если вас особенно интересует Linux, см.man 7 sched
для подробной информации о его политиках планирования. Недружественные приятные уровни традиционно могут быть установлены только с помощью root
, но непривилегированным процессам можно разрешить делать это в Linux, повысив лимит ресурсов RLIMIT_NICE
.
Простой способ использовать команду усечения с опцией удаления. \033 представляет escape-символ.
$cat ваше _имя файла|tr -d \033 > сохранить _имя файла
используйте следующую команду, чтобы удалить все управляющие символы
$cat ваше _имя файла|tr -d [:cntrl :] > сохранить _имя файла
Надеюсь, это поможет
Файл содержит ряд escape-последовательностей(последовательность символов ^[
является escape-символом):
^[[2J
, очищает экран.
^[[H
, перемещает курсор в верхнюю часть экрана.
^[[x;yH
, перемещает курсор в позицию (x,y)
.
Это означает, что файл в основном использует абсолютное позиционирование текста на экране.
^[[K
очищает до конца строки.
Файл также содержит несколько символов возврата каретки, которые мы можем захотеть удалить.
Мы можем удалить большинство из них, но для простоты заменить последовательности «перейти к (x,y)
» одной новой строкой. К счастью, каждое подобное позиционирование просто перемещает курсор вниз на строку и делает отступ на четыре пробела (, нет «непоследовательных» строк текста ).
sed -e $'s/\e\\[2J//g' \
-e $'s/\e\\[H//g' \
-e $'s/\e\\[[[:digit:]]*;[[:digit:]]*H/@ /g' -e 'y/@/\n/' \
-e $'s/\e\\[K//g' \
-e $'s/\r//g' file
Замены здесь выполняются с использованием строк C -в оболочке ($'...'
, поддерживаемых, например. bash
иzsh
)для кодирования escape-символов.
Каждая ^[[x;yH
последовательность заменяется новой строкой и четырьмя пробелами отступа в два -шага; сначала заменив их на@
(@
любой символ, который иначе не присутствует в данных ), а затем замените каждый @
новой строкой, используя y///
. Это связано с тем, что s///
не может вставлять новые строки (, хотя GNU sed
может ).
Мы также можем работать с выходными данными при выполнении cat -v
данных. Это делает некоторые управляющие символы видимыми -не двусмысленным образом.
$ cat -v file
^[[H^[[2J^[[1;1H^M
^[[4;4H CONFIDENTIAL INFORMATION^[[K^[[5;4H^[[K^[[6;4H^[[K^[[7;4HThis work contains valuable, confidential, and proprietary information.^[[K^[[8;4HDisclosure, use, or reproduction is governed by your License Agreement.^[[K^[[10;4H^[[K^[[11;4HThis unpublished work is protected by the laws of the United States and^[[K^[[12;4Hother Countries. The work was created in 1988 and revised in 1994. ^[[K^[[13;4HIf publication occurs, the following notice shall apply:^[[K^[[14;4H^[[K^[[15;4H^[[K^[[16;4H Copyright 1988,1994. All rights reserved.^[[K^[[17;4H^[[K^[[18;4H^[[K^[[19;4HThis Copyright notice and other copyright notices included in the machine^[[K^[[20;4Hreadable copies must be reproduced on all authorized copies.^[[K^[[21;4H^[[K^[[22;4HThis is a registered trademark.^[[K^M
Здесь мы можем использовать следующую sed
команду:
cat -v file |
sed -e 's/\^\[\[2J//g' \
-e 's/\^\[\[H//g' \
-e 's/\^\[\[[[:digit:]]*;[[:digit:]]*H/@ /g' -e 'y/@/\n/' \
-e 's/\^\[\[K//g' \
-e 's/\^M//g'
Обратите внимание, что вариант -v
для cat
не является стандартным, но выходные данные реализаций cat
, поддерживающих его, кажутся согласованными.
В некоторых системах утилита vis
может использоваться вместо cat -v
, но она генерирует другие видимые представления управляющих символов.
Лучше всего было бы, чтобы эмулятор терминала интерпретировал эти последовательности и приказал ему сбросить результат.
screen
— один из тех эмуляторов терминала, с которым можно легко взаимодействовать в скрипте. Вы можете сделать:
INPUT=file.txt OUTPUT=output.txt screen -Dmc /dev/null sh -c '
screen -X scrollback 100000
cat < "$INPUT"
screen -X hardcopy -h "$OUTPUT"'