Um ponto-chave na resposta de muru é que, para obter uma barra invertida no FS
regex, você precisa escrever double backslash \
. Isso porque a barra invertida é usada como um caractere de escape em dois níveis diferentes.
Uma única barra invertida em uma string será tratada como escapando do caractere seguinte, por isso precisamos escapar da própria barra invertida para que possamos obter uma única barra invertida na regex. E então essa barra invertida irá escapar do seguinte caractere dentro da regex.
Como eu disse em um comentário, não há diferença entre FS='ax\*'
e FS='ax*'
porque \*
é tratado como *
, mas awk imprimirá um aviso para esse efeito. Se você quiser colocar um literal *
no FS
, será necessário usar barras invertidas duplas, por exemplo, FS='ax\*'
será dividido em ax*
.
Talvez alguns exemplos tornem tudo isso mais claro.
#!/usr/bin/env bash
s='123abcd
123axbcd
123axxbcd
123ax*bcd
123ax**bcd'
printf "%s\n\n" "$s"
awk -F 'ax*' 'BEGIN{printf "FS=[%s]\n", FS};{printf "[%s] [%s]\n", $1, $2}' <<< "$s"
echo
awk 'BEGIN{FS="ax*"; printf "FS=[%s]\n", FS};{printf "[%s] [%s]\n", $1, $2}' <<< "$s"
echo
awk -F 'ax\*' 'BEGIN{printf "FS=[%s]\n", FS};{printf "[%s] [%s]\n", $1, $2}' <<< "$s"
echo
awk 'BEGIN{FS="ax\*"; printf "FS=[%s]\n", FS};{printf "[%s] [%s]\n", $1, $2}' <<< "$s"
echo
awk -F 'ax\*' 'BEGIN{printf "FS=[%s]\n", FS};{printf "[%s] [%s]\n", $1, $2}' <<< "$s"
echo
awk 'BEGIN{FS="ax\*"; printf "FS=[%s]\n", FS};{printf "[%s] [%s]\n", $1, $2}' <<< "$s"
echo
saída
123abcd
123axbcd
123axxbcd
123ax*bcd
123ax**bcd
FS=[ax*]
[123] [bcd]
[123] [bcd]
[123] [bcd]
[123] [*bcd]
[123] [**bcd]
FS=[ax*]
[123] [bcd]
[123] [bcd]
[123] [bcd]
[123] [*bcd]
[123] [**bcd]
awk: warning: escape sequence '\*' treated as plain '*'
FS=[ax*]
[123] [bcd]
[123] [bcd]
[123] [bcd]
[123] [*bcd]
[123] [**bcd]
awk: warning: escape sequence '\*' treated as plain '*'
FS=[ax*]
[123] [bcd]
[123] [bcd]
[123] [bcd]
[123] [*bcd]
[123] [**bcd]
FS=[ax\*]
[123abcd] []
[123axbcd] []
[123axxbcd] []
[123] [bcd]
[123] [*bcd]
FS=[ax\*]
[123abcd] []
[123axbcd] []
[123axxbcd] []
[123] [bcd]
[123] [*bcd]