Существуют ли какие-либо инструменты/одиночные вкладыши UNIX, которые удаляли бы скрывающиеся пробелы для нескольких файлов на месте.
например. который можно было бы использовать в сочетании с поиском.
Существуют ли какие-либо инструменты/одиночные вкладыши UNIX, которые удаляли бы скрывающиеся пробелы для нескольких файлов на месте.
например. который можно было бы использовать в сочетании с поиском.
Вы хотите
sed --in-place 's/[[:space:]]\+$//' file
Это приведет к удалению всех стандартных пробелов POSIX, включая вертикальную вкладку и фид формы. Кроме того, он будет выполнять замену только в том случае, если конечный пробел фактически существует, в отличие от других ответов, в которых используется нуль или более совпадение (*
).
--in-place
- это просто длинная форма -i
. Я предпочитаю использовать длинную форму в сценариях, потому что она имеет тенденцию быть более иллюстрацией того, что на самом деле делает флаг.
Он легко интегрируется с find
следующим образом:
find . -type f -name '*.txt' -exec sed --in-place 's/[[:space:]]\+$//' {} \+
Как указано в комментариях, вышесказанное не работает, если у вас нет установленных gnu-инструментов. В этом случае вы можете использовать следующее:
find . -iname '*.txt' -type f -exec sed -i '' 's/[[:space:]]\{1,\}$//' {} \+
В отличие от других решений, для которых все требуют GNU sed, этот должен работать на любой системе Unix, реализующей стандартные команды POSIX.
find . -type f -name "*.txt" -exec sh -c 'for i;do sed 's/[[:space:]]*$//' "$i">/tmp/.$$ && mv /tmp/.$$ "$i";done' arg0 {} +
Изменить: эта слегка измененная версия сохраняет разрешения файлов:
find . -type f -name "*.txt" -exec sh -c 'for i;do sed 's/[[:space:]]*$//' "$i">/tmp/.$$ && cat /tmp/.$$ > "$i";done' arg0 {} +
Я использовал this, чтобы исправить пробелы:
while IFS= read -r -d '' -u 9
do
if [[ "$(file -bs --mime-type -- "$REPLY")" = text/* ]]
then
sed -i -e 's/[ \t]\+\(\r\?\)$/\1/;$a\' -- "$REPLY"
else
echo "Skipping $REPLY" >&2
fi
done 9< <(find . \( -type d -regex '^.*/\.\(git\|svn\|hg\)$' -prune -false \) -o -type f -print0)
Особенности:
[:space:]
), поэтому он отлично работает в файлах в стиле Windows/DOS.file
считает текстовым файлом.Для тех, кто не является sed gurus (включая меня), я создал небольшой script для использования регулярных выражений JavaScript для замены текста в файлах и замены на месте:
Чтобы удалить конечный пробел, вы можете использовать его как таковое:
$ node sed.js "/^[\t ]*$/gm" "" file
Enjoy
ex
Попробуйте использовать редактор Ex (часть Vim):
$ ex +'bufdo!%s/\s\+$//e' -cxa *.*
Примечание. Для рекурсии (bash4 и zsh) вы можете использовать новую опцию globbing (**/*.*
). Включить shopt -s globstar
.
perl
find . -type f -name "*.java" -exec perl -p -i -e "s/[ \t]$//g" {} \;
согласно Spring Стиль кода рамки.
sed
Для использования sed
, проверьте: Как удалить конечные пробелы с помощью sed?
См. также: Как удалить конечные пробелы всех файлов рекурсивно?
Как насчет этого:
sed -e -i 's/[ \t]*$//'
Btw, это удобный сайт: http://sed.sourceforge.net/sed1line.txt
По какой-то причине команды sed и perl не работали для меня. Это произошло:
find ./ -type f | rename 's/ +$//g'
Чувствует себя как самый прямой, чтобы читать, а также