Начало для обрезки текстового файла

Я имею текстовый файл с неожиданными пробелами вначале и хотел бы обрезать начало и сохранить его. Как я могу сделать это?

Я попробовал очень простой пример, который я нашел в Интернете, но он стирает файл вместо этого:

cat /etc/nginx/sites-enabled/default| sed -e 's/^[ \t]*//' > /etc/nginx/sites-enabled/default
2
задан 18 February 2016 в 12:07

4 ответа

Это:

cat /etc/nginx/sites-enabled/default| sed -e 's/^[ \t]*//' > /etc/nginx/sites-enabled/default

усекает файл, потому что перенаправление > разрешается первым; то есть файл усекается до запуска cat и sedcat читает пустой файл).

Также команда удаляет начальные пробелы и табуляции .

Если это то, что вы хотите, просто используйте опцию на месте sed (и отбросьте бесполезные cat):

sed -ie 's/^[ \t]*//' /etc/nginx/sites-enabled/default

Если вы хотите удалить только начальные пробелы, используйте эту вместо этого:

sed -ie 's/^ *//' /etc/nginx/sites-enabled/default

Также похоже, что вы хотите обработать только первую строку.

Если это так, добавьте 1 к команде s; то есть :

sed -ie '1s/^[ \t]*//' /etc/nginx/sites-enabled/default

для удаления первых пробелов и табуляций из первой строки и

sed -ie '1s/^ *//' /etc/nginx/sites-enabled/default

для удаления только первых пробелов из первой строки.

1
ответ дан 2 December 2019 в 04:58

Используйте это вместо:

cat 1.txt | sed 's/^ *//;s/ *$//' | sed '/^$/d' > 2.txt

Объяснение

  1. cat 1.txt - загружает содержимое файла как ввод
  2. sed 's/^ *//;s/ *$//' - удаляет пустые места из обе стороны файла. Начало или трейлинг.
  3. sed '/^$/d' - удаляет пустые строки (в случае, если вышла указанная выше команда)
  4. > 2.txt - сохраняет результат в новый файл.

Если вы не хотите удалять пустые строки, пропустите третий шаг. В этом случае ваша команда становится такой:

cat 1.txt | sed 's/^ *//;s/ *$//' > 2.txt

Пример

Вводимый текст (как изображение, точки показывают пробелы):

enter image description here [ 118]

Вывод текста (в виде изображения, без точек и удаленных пустых строк):

enter image description here

РЕДАКТИРОВАТЬ

Приведенное выше объяснение очищает файл, если перенаправлен на себя, как показано ниже:

cat 1.txt | sed 's/^ *//;s/ *$//' | sed '/^$/d' > 1.txt

Чтобы обработать это и убедиться, что содержимое перезаписано в файл, нам просто нужно вывести вывод как в команде ниже:

echo | cat 1.txt | sed 's/^ *//;s/ *$//' | sed '/^$/d' > 1.txt
0
ответ дан 2 December 2019 в 04:58

Вы также можете использовать Python (как Python 2, так и Python 3) для задания:

python -c 'import sys; print("".join((str(line).lstrip(" ") for line in sys.stdin)))' <INPUTFILE >OUTPUTFILE

Что делает эта команда:

  • python -c '...' или python3 -c '...' :
    Запустите интерпретатор Python (2 или 3) и позвольте ему запускать команды в кавычках.
  • import sys; print("".join((str(line).lstrip(" ") for line in sys.stdin))):
    Это небольшой скрипт на Python, сжатый в одну строку, который читает все из STDIN (стандартный поток ввода) и печатает его обратно в STDOUT (стандартный поток вывода) после удаления всех пробелов символы (включая пробелы, символы табуляции и т. д.) в начале каждой строки. Он будет продолжать чтение до тех пор, пока не закончится поток, то есть либо до тех пор, пока вы не введете вручную Ctrl + D , если STDIN подключен к клавиатуре, либо пока все данные не будут пройдены, STDIN подключен к файлу или каналу.
  • <INPUTFILE:
    Это связывает файл INPUTFILE (замените соответствующим именем файла) с STDIN команды. Если вы пропустите это, команда будет читать с клавиатуры.
  • >OUTPUTFILE:
    Это связывает файл OUTPUTFILE (замените соответствующим именем файла) с STDOUT команды. Если вы пропустите это, команда выведет свои выходные данные на терминал.

Обратите внимание, что в этом случае INPUTFILE и OUTPUTFILE могут не совпадать с файлами, так как используемое перенаправление вывода Bash разрешается первым и перезаписывает файл перед чтением из него скриптом. [ 1120]

0
ответ дан 2 December 2019 в 04:58

Можно использовать Vim в режиме Ex:

ex -sc '%s/^[ \t]*//|x' /etc/nginx/sites-enabled/default
  1. % выбор все строки

  2. s замена

  3. x сохраняет и закрывается

0
ответ дан 2 December 2019 в 04:58

Другие вопросы по тегам:

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