Como posso corresponder espaço em branco no sed? Nos meus dados, desejo corresponder a todos os três caracteres de espaço em branco subsequentes (espaço de tabulação) e substituí-los por 2 espaços. Como isso pode ser feito?
Como posso corresponder espaço em branco no sed? Nos meus dados, desejo corresponder a todos os três caracteres de espaço em branco subsequentes (espaço de tabulação) e substituí-los por 2 espaços. Como isso pode ser feito?
Respostas:
A classe de caracteres \s
corresponderá aos caracteres de espaço em branco <tab>
e <space>
.
Por exemplo:
$ sed -e "s/\s\{3,\}/ /g" inputFile
substituirá cada sequência de pelo menos três espaços em branco por dois espaços.
OBSERVAÇÃO : Para conformidade com POSIX, use a classe de caracteres em [[:space:]]
vez de \s
, pois a última é uma extensão GNU sed. Veja as especificações POSIX para sed e BREs
sed
eu tive que usar [[:space:]]
porque \s
não funcionou para mim. Talvez \s
seja uma extensão GNU sed ?
[[:space:]
um poderia usar o [[:blank:]]
que corresponde apenas a abas horizontais e espaços (mas nenhuma nova linha, aba vertical etc.).
Isso funciona no MacOS 10.8:
sed -E "s/[[:space:]]+/ /g"
sed "s/[[:space:]]\+/ /g"
corresponder a um ou mais espaços.
-E
bandeira.
Algumas versões mais antigas do sed podem não reconhecer \ s como um símbolo de espaço em branco correspondente. Nesse caso, você pode combinar uma sequência de um ou mais espaços e tabulações com '[XZ] [XZ] *' onde X é um espaço e Z é uma tabulação.
sed 's/[ \t]*/"space or tab"/'
sed
ou sistema? Caso contrário, vale a pena mencionar onde isso funciona da mesma maneira que as outras respostas, apenas para conhecermos as limitações e onde isso pode não ter o resultado pretendido.