Команда cat, похоже, добавляет дополнительный символ $ в конец каждой строки

Я пытаюсь создать файл, и похоже, что редактор vi добавляет $ в конец каждой строки. Я не знаю, что вызывает это или как предотвратить это в vi .

vi file.txt
12345
abcde

cat -v -e file.txt
12345$
abcde$

wc file.txt
2 2 12

Мне не нужны символы $ в конце; они ломают мои файлы автоматизации, которые зависят от количества символов. Почему в счетчике слов отображается 12 символов, если на самом деле каждая строка состоит из 5 символов?

VIM version 7.4.629

-2
22.06.2016, 02:39
1 ответ

Комментарий @ steeldriver верен: cat показывает окончания строк с помощью $ (как vi мог бы, если бы вы вежливо спросили, используя ": set list" ). Дополнительный символ в строке - это новая строка (невидимый символ в конце каждой строки текста).

Если вам нужен только счет печатаемого текста, вы можете отфильтровать файл перед его обработкой с помощью wc , например, используя tr с -d вариант. Вот сценарий, который считается примером:

#!/bin/sh
cat $0 |wc
cat $0 | tr -d '\r\n\t' | wc
cat $0 | tr -d '[:cntrl:]' |wc

хотя последняя строка, возможно, недостаточно переносима для вашего использования (она находится в POSIX , в разделе extended ). Но он будет работать на всем, что вы, вероятно, будете использовать, исходя из подсказок в обосновании.

5
28.01.2020, 05:14

Теги

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