O comando pode ser condensado assim, se você estiver usando o GNU sed
:
$ sed 's/^[ \t]*//;s/[ \t]*$//' < file
Exemplo
Aqui está o comando acima em ação.
$ echo -e " \t blahblah \t " | sed 's/^[ \t]*//;s/[ \t]*$//'
blahblah
Você pode hexdump
confirmar se o sed
comando está removendo os caracteres desejados corretamente.
$ echo -e " \t blahblah \t " | sed 's/^[ \t]*//;s/[ \t]*$//' | hexdump -C
00000000 62 6c 61 68 62 6c 61 68 0a |blahblah.|
00000009
Classes de caracteres
Você também pode usar nomes de classes de caracteres em vez de listar literalmente os conjuntos como este [ \t]
:
$ sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//' < file
Exemplo
$ echo -e " \t blahblah \t " | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//'
A maioria das ferramentas GNU que usam expressões regulares (regex) suportam essas classes.
[[:alnum:]] - [A-Za-z0-9] Alphanumeric characters
[[:alpha:]] - [A-Za-z] Alphabetic characters
[[:blank:]] - [ \x09] Space or tab characters only
[[:cntrl:]] - [\x00-\x19\x7F] Control characters
[[:digit:]] - [0-9] Numeric characters
[[:graph:]] - [!-~] Printable and visible characters
[[:lower:]] - [a-z] Lower-case alphabetic characters
[[:print:]] - [ -~] Printable (non-Control) characters
[[:punct:]] - [!-/:-@[-`{-~] Punctuation characters
[[:space:]] - [ \t\v\f] All whitespace chars
[[:upper:]] - [A-Z] Upper-case alphabetic characters
[[:xdigit:]] - [0-9a-fA-F] Hexadecimal digit characters
Usar esses conjuntos em vez de conjuntos literais sempre parece um desperdício de espaço, mas se você estiver preocupado com seu código ser portátil ou precisar lidar com conjuntos de caracteres alternativos (pense internacional), provavelmente usará os nomes das classes em vez de.
Referências