Как это:
tr -d '\-|\\+[:blank:] ' < file
Вы должны экранировать -
, потому что он используется для обозначения диапазонов символов, таких как:
tr -d '1-5'
и, следовательно, должен быть сброшен, если вы имеете в виду буквальный дефис. Вы также можете положить его в конце. (узнал что, спасибо! :))
Кроме того, \
необходимо экранировать, когда вы имеете в виду литерал \
, поскольку он имеет особое значение, необходимое для escape-последовательностей.
Остальные символы не должны быть экранированы.
Почему в вашем примере \
нужно дважды избежать?
Это потому, что вы используете строку ""
(двойные кавычки) для цитирования набора символов. Строка в двойных кавычках будет интерпретироваться оболочкой, а \\
в строке в двойных кавычках означает литерал \
. Попробуйте:
echo "\+"
echo "\\+"
echo "\\\+"
Чтобы избежать двойного выхода из \
, вы можете просто использовать одинарные кавычки, как в моем примере выше.
Почему ставится '|' в конце установленной строки заставить программу tr удалять все в файле, кроме завершающих символов новой строки?
После комментария CharlesDuffy , имеющего |
в конце, также означает, что у вас не было экранированного -
не в конце, что означает, что он описывал диапазон символов, от которых зависит реальный диапазон позиция у вас была в наборе.