Ответ 1
Что вы видите, есть контрольные символы, вы просто можете удалить их с помощью tr
cat your_file |
tr -d '\b\r'
это лучше:
tr -d '\b\r' < your_file
Как удалить символы ^ H и ^ M из файла с помощью сценариев оболочки Linux?
^[[0^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H rcv-packets: 0
^[[0^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H rcv-errs: 0
rcv-drop: 0
rcv-fifo: 0
rcv-frame: 0
Что вы видите, есть контрольные символы, вы просто можете удалить их с помощью tr
cat your_file |
tr -d '\b\r'
это лучше:
tr -d '\b\r' < your_file
Два метода сразу приходят на ум:
tr -d control+v control+h
sed 's/control+v control+h//g'
Здесь и в действии:
$ od -c test
0000000 \b h e l l o \b t h e r e \b \n
0000016
$ sed 's/^H//g' < test | od -c
0000000 h e l l o t h e r e \n
0000013
$ tr -d ^H < test | od -c
0000000 h e l l o t h e r e \n
0000013
Для удаления символов ^ M, появляющихся в конце каждой строки, я обычно делаю это в редакторе vi.
:%s/.$//g
Он просто удаляет последний символ каждой строки независимо от того, что это за символ. Это решило мою проворность.
Используйте утилиту sed
.
См. Ниже примеры:
sed 's/%//' file > newfile
echo "82%%%" | sed 's/%*$//'
echo "68%" | sed "s/%$//" #assume % is always at the end.
Вы можете удалить все управляющие символы, используя tr
, например
tr -d "[:cntrl:]" file.txt
Чтобы исключить некоторые из них (например, окончания строк), проверьте: Удаление управляющих символов из файла.
если вы хотите изменить оригинальный файл, сделайте это:
sed -i '.bak' 's/^M//g ; s/^H//g' test.md
(^ M это control+v
control+m
)
(^ H это control+v
control+h
)
много файлов, вы можете сделать это:
find source -name '*.md' | xargs sed -i '.bak' 's/^M//g ; s/^H//g'