Используйте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)"
Я думаю, что этот параметр должен улучшить взаимодействие с пользователем, а не "производительность".
Это должно избавить вас от необходимости запускать hash -r
вручную при перемещении или удалении исполняемого файла.
Сравните:
bash$ mkdir -p first second; PATH=$PATH:first:second
bash$ echo echo ok > first/ok; chmod 755 first/ok
bash$ ok
ok
bash$ mv first/ok second/ok
bash$ ok
bash: first/ok: No such file or directory
# Yet it's in the PATH!
bash$ hash -r
bash$ ok
ok
против
bash$ shopt -s checkhash
bash$ mv second/ok first/ok
bash$ ok
ok
bash$ mv first/ok second/ok
bash$ ok
ok
bash$