Je suis nouveau chez Unix.
${AWK} '\!/^ / && \!/^-/ && \!/^</ && \!/^$/ {printf "%s,,N,N,N,,,,\n", $1}' ~/ozserver.txt
Lorsque je lance la commande comme avant, il y a errorInfo
imprimé dans la fenêtre Cygwin comme suit:
awk: commandline:1: ^ backslash not last character on line
En fait, mon rôle est de traduire csh
en bash
pour l’apprentissage. Je n’ai pas écrit ce code. Donc, ce que je sais, c’est:
"\!/regex/" : is a model unit."\" is belong to the awk synax for cut down the long sentence "!"means logical NOT,"/regex/" means one model.btw,"&&" means logical AND.
Je ne peux tout simplement pas comprendre où est le problème. Quelqu’un peut-il me donner un signe?
Le zoo metasyntactique csh
veut dire ça !
est un opérateur historique, même à l’intérieur de guillemets simples, ou quelque chose comme ça. Dans des coquilles sensuelles dérivées de Bourne Shell, le !
n’est pas un gros problème, et vous pouvez simplement écrire:
${AWK} '!/^ / && !/^-/ && !/^</ && !/^$/ {printf "%s,,N,N,N,,,,\n", $1}' ~/ozserver.txt
Bien sûr, cela peut encore être simplifié:
${AWK} '!/^[- <]/ && !/^$/ {printf "%s,,N,N,N,,,,\n", $1}' ~/ozserver.txt
Cela cherche le début de ligne suivi de quelque chose d'autre que blanc, tiret ou moins que (ce n'est pas une ligne vide). Cela aussi peut être simplifié en utilisant une classe de caractères négative:
${AWK} '/^[^- <]/ {printf "%s,,N,N,N,,,,\n", $1}' ~/ozserver.txt
Cela recherche une ligne commençant par un caractère autre que blanc, tiret ou inférieur à (mais il doit contenir au moins un caractère, donc les lignes vides sont automatiquement exclues). Et la dernière version pourrait même fonctionner correctement dans csh
car elle n'en utilise pas !
du tout.