1

私はUnixを初めて使用します。

${AWK} '\!/^ / && \!/^-/ && \!/^</ && \!/^$/ {printf "%s,,N,N,N,,,,\n", $1}' ~/ozserver.txt

以前のようにコマンドを実行するerrorInfoと、Cygwinウィンドウに次のように出力されます。

awk: commandline:1: ^ backslash not last character on line

実際、私の役割は学習のために翻訳cshされています。bash私はそのコードを書きませんでした。だから、私が知っているのは:

"\!/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.

どこが悪いのかわからない。誰かが私にサインをくれますか?

4

1 に答える 1

3

cshメタ構文動物園」と!は、一重引用符などの内部でも履歴演算子であることを意味します。Bourneシェルから派生したsane^H ^ H ^ H ^ Hシェルでは、これ!はそれほど大きな問題ではなく、次のように簡単に記述できます。

${AWK} '!/^ / && !/^-/ && !/^</ && !/^$/ {printf "%s,,N,N,N,,,,\n", $1}' ~/ozserver.txt

もちろん、それはさらに単純化することができます:

${AWK} '!/^[- <]/ && !/^$/ {printf "%s,,N,N,N,,,,\n", $1}' ~/ozserver.txt

これは、行の先頭に続いて、空白、ダッシュ、またはより小さいもの(空の行ではない)以外のものを探します。これも、否定された文字クラスを使用することで簡略化できます。

${AWK} '/^[^- <]/ {printf "%s,,N,N,N,,,,\n", $1}' ~/ozserver.txt

これは、空白、ダッシュ、またはそれ以下の文字で始まる行を検索します(ただし、少なくとも1文字が含まれている必要があるため、空の行は自動的に除外されます)。また、最後のバージョンcshはまったく使用されていないため、問題なく動作する可能性があり!ます。

于 2012-12-20T05:52:51.820 に答える