Как сделать str.strip() для каждой строки в текстовом файле? Юникс

90
9

Я мог бы сделать следующее на python, чтобы очистить и удалить нежелательные пробелы, но можно ли это сделать через терминал другими способами, такими как sed, grep или что-то еще?

outfile = open('textstripped.txt','w+','utf8')
for i in open('textfile.txt','r','utf8'):
print>>outfile, i.strip()

спросил(а) 2013-03-11T06:49:00+04:00 7 лет, 6 месяцев назад
1
Решение
57

$ cat input.txt | sed 's/^[ \t]*//;s/[ \t]*$//' > output.txt

Это избавляет от ведущих и завершающих пробелов.

EDIT: sed -e "s/^[ \t]+//; s/[ \t]+$//" -i.bk input.txt

Это делает редактирование файлов и сохраняет резервную копию на input.txt.bk (и сохраняет процесс, как это было предложено)

ответил(а) 2013-03-11T06:58:00+04:00 7 лет, 6 месяцев назад
69

Это решение основано на странице sed man:

sed 'y/\t/ /;s/^ *//;s/ *$//' input > output

http://www.gnu.org/software/sed/manual/sed.html#Centering-lines


Описание:

y\t// заменяет вкладки пробелами

s/^ *// удаляет ведущие пространства

s/*$// удаляет конечные пробелы

ответил(а) 2013-03-11T07:20:00+04:00 7 лет, 6 месяцев назад
70

Использование perl в командной строке:

perl -lpe 's/^\s+//; s/\s+$//' file.txt > stripped.txt

ответил(а) 2013-03-11T07:08:00+04:00 7 лет, 6 месяцев назад
57

sed -E "s/(^[ \t]+|[ \t]+$)//" < input > output

Или если у вас есть версия SED, совместимая с GNU:

sed -E "s/^\s+|\s+$//g" < in > out

Если у вас есть Mac, я рекомендовал получить homebrew и установить gnu-sed. Затем, alias sed=gsed.

ответил(а) 2013-03-11T07:02:00+04:00 7 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема