Se você precisar escrever scripts portáteis, você deve se ater aos recursos no padrão POSIX (também conhecido como Single Unix aka Open Especificação da base do grupo). O problema 7 a.k.a. POSIX-1.2008 é o mais recente, mas muitos sistemas ainda não o adotaram ainda. A edição 6 a.k.a POSIX-1.2001 é em geral fornecida por todos os modernos sindicatos.
Em sed , o significado de sequências de escape como \t
e \n
é não é portável, exceto que em um regex , \n
significa uma nova linha. No texto de substituição de um comando s
, \n
não é portátil, mas você pode usar a sequência de barras invertidas-newline para representar uma nova linha.
Uma forma portátil de gerar um caractere de tabulação (ou qualquer outro caractere expresso em octal) é com tr
. Armazene o caractere em uma variável do shell e substitua essa variável no snippet de sed.
tab=$(echo | tr '\n' '\t')
escape=$(echo | tr '\n' '3')
embolden () {
sed -e 's/^/'"$escape"'[1m/' -e 's/$/'"$escape"'[0m/'
}
Observe novamente que as novas linhas precisam ser expressas de maneira diferente nas expressões regulares e nos textos de substituição s
.
Você pode usar o awk . Ele permite escapes de barra invertida, incluindo octal escapes \ooo
, em todo literal de string.