Вы можете использовать wget
для отправки HTTP-запроса. Например:
wget http://unix.stackexchange.com
Используйтеsed
:
sed -z 's/^\s*//; s/\s*$//' infile
s/^\s*//
, удаляет пробелы/пустые строки в самом начале infile
в качестве входного файла.
s/\s*$//
, удалены пробелы/пустые строки в самом конце infile
в качестве входного файла, включая \n
в самом конце infile
.
Примерcat -e infile
:
$
$
$
Three blank lines above$
$
$
Two blank lines in the middle$
a blank lines below$
$
a line with trailing whitespaces $
a line with leading whitespaces$
below are two empty lines + one whitespaces then an empty line again$
$
$
$
$
Выход:
Three blank lines above
Two blank lines in the middle
a blank lines below
a line with trailing whitespaces
a line with leading whitespaces
below are two empty lines + one whitespaces then an empty line again
Или вы можете использовать printf
для вывода результата sed
, который удалил самые первые пробелы/пустые строки и использовал его в подстановке команд, которая удаляет пустые строки только в самом конце и \n
.
printf '%s' "$(sed -z 's/^\s*//' infile)"
Ну, не шелл-скрипт, а PHP-решение, которое я написал:
имя скрипта:trimfile.php
<?php
if ( (!empty($argv[1])) && (file_exists($argv[1])) ) {
$file_contents = file_get_contents($argv[1]);
$new_file_contents = trim($file_contents). "\n";
if ($file_contents <> $new_file_contents) {
file_put_contents($argv[1], $new_file_contents);
}
}
?>
Использование:
$ php trimfile.php yourfile.txt
Если вы хотите удалить все пробелы и новые строки, а не только последнюю новую строку, вы можете использоватьtr
:
tr -d '[[:space:]]' < file > file.trimmed
Или, точнее:
tr -d '\t\n ' < file > file.trimmed
Предположим, вы хотите удалить начальные/конечные пробелы для каждой строки , а не для файла в целом.
Тестовый файл, в котором некоторые строки имеют начальные или конечные пробелы, а также пустые строки.:
$ cat -e file
line 1$
line 2$
line 3 has trailing spaces $
$
blank line above$
И команда GNU sed для обрезки
$ sed -r 's/^\s+//; s/\s+$//; /^$/d' file | cat -e
line 1$
line 2$
line 3 has trailing spaces$
blank line above$
Вawk
:
{ isblank = 0 }
/^[[:blank:]]*$/ { isblank = 1 }
state == 0 && isblank { next }
state == 0 && !isblank { state = 1 }
state == 1 && isblank { buffer[++n] = $0 }
state == 1 && !isblank { for (i = 1; i <= n; ++i) print buffer[i]; n = 0; print }
state
обозначает, в каком состоянии находится программа. Когда state == 0
, программа удалит все пустые строки. Пустая строка — это строка, которая пуста или содержит только пробелы или символы табуляции (, что соответствует [[:blank:]]
). Программа остается в state == 0
до тех пор, пока не будет найдена не-пустая строка. Это обрезает начало файла.
При state == 1
программа будет сохранять пустые строки в массив buffer
. Эти пустые строки необходимо вывести, как только будет найдена пустая строка, отличная от -. Если не найдено не -пустых строк, они будут отброшены (, это обрезает конец файла ).
Общий эффект заключается в том, что пустые строки в начале и конце файла удаляются, в то время как пустые строки в других местах сохраняются (, включая их пробелы или табуляции, если они содержались в исходном файле ).
Тестирование:
$ cat file
Three blank lines above
Two blank lines in the middle
Three blank lines below
$ awk -f trim.awk file
Three blank lines above
Two blank lines in the middle
Three blank lines below
Программа не изменяет пробелы в начале первой непустой строки -и в конце последней непустой строки -. Если это необходимо, можно использовать
$ awk -f trim.awk file | sed -e '1s/^[[:blank:]]*//' -e '$s/[[:blank:]]*$/'
Вы можете попробовать ed, которого, к сожалению, нет в стандартной установке Debian.
printf '%s\n' \
'g/[^[:blank:]][^[:blank:]]*/kx' \
"'"'x,$j' \
'$s/[[:blank:]]*$//' \
'/[^[:blank:]][^[:blank:]]*/kx' \
'1,'"'"'xj' \
'1s/^[[:blank:]]*//' \
'wq' |
ed -s infile
Или с гну сэд
sed -Ezi 's/^\s+|\s+$//g;s/$/\n/' infile