Preciso imprimir linhas entre aquelas que contenham "/" no nome. Eu tentei com:
awk '/+SOLUTION/ESTIMATES/,/-SOLUTION/ESTIMATES/' $F > fil$F
e
awk '/+SOLUTION"/"ESTIMATES/,/-SOLUTION"/"ESTIMATES/' $F > fil$F
e
awk '/"{+SOLUTION/ESTIMATES}"/,/"{-SOLUTION/ESTIMATES}"/' $F > fil$F
mas o erro é sempre mais ou menos igual a "string não terminada".
Como posso imprimir linhas entre esses padrões?
Ao substituir
/
os\57
registros entre os padrões (e os registros com esses padrões) podem ser impressos.Mas leia isto antes de usar expressões de intervalo .
/regex/
é a abreviação de$0 ~ /regex/
, que você também pode escrever$0 ~ "regex"
, portanto, além de escapar/
prefixando-o\
ou usando-\octal
o com o/
valor do caractere (\57
em sistemas baseados em ASCII,\141
em sistemas baseados em EBCDIC, por exemplo) , você também pode fazer:Cuidado
+
é um operador regex estendido, portanto precisa ser escapado como\+
ou[+]
. Como\
também tem um significado especial na sintaxe de"strings"
, é melhor dobrá-lo para ser\
passado para o mecanismo de regex. Com algumasawk
implementações, você pode conseguir apenas,"\+"
mas não todas.Observe que usar o redirecionamento em vez de passar o caminho do arquivo como argumento é preferível quando possível, pois
awk
engasgaria com valores$F
como-
ou que contêm=
(ou que começam com-
versões mais antigas de busyboxawk
). Você também esqueceu de citar esse$F
argumento, tornando-o sujeito a split+glob. Geralmente, não é necessário citar expansões de parâmetros em destinos de redirecionamentos, exceto pelas notáveis exceções de ksh88 e do shell bash quando não está no modo POSIX (este último ainda é amplamente usado), portanto, ainda é um bom hábito citá-los lá também.Aqui, em vez de uma correspondência de regex, você poderia fazer uma pesquisa de substring:
Para imprimir da linha exata até
+SOLUTION/ESTIMATES
a linha exata (-SOLUTION/ESTIMATES
ou até o final da entrada, se não for encontrada) :Usar
perl
oferece mais flexibilidade:Quando usado dentro de uma constante de expressão regular awk , o caractere de barra deve ser escapado para distingui-lo dos delimitadores circundantes. Por exemplo com GNU awk:
mas
Além disso, o
+
caractere tem um significado especial no dialeto Extended Regular Expression (ERE) usado pelo awk e deve ser escapado se você quiser corresponder a um caractere de adição literal. Então: