名前が引数で指定されたファイルを確認し、正確に7文字を含む一意の行数を印刷するコマンドを作成しようとしています。私はgrep
これを使用していますが、find
間違っています。何を使うべきですか、どのパターンを使うべきですか?
ベストアンサー1
これがあなたの命令かもしれません。以下は、コマンドラインからファイル名を取得し、その中に7文字を含むすべての行を出力するスクリプトです。
#!/bin/sh
grep -c '^.......$' "$1"
上記のスクリプトを実行可能にしてから(このコマンドを使用してchmod +x script.sh
)、確認したいファイル名で実行する必要があります./script.sh file
。file
注文する
grep -c '^.......$'
指定されたファイルに正確に7文字(スペースを含む)を含む行数を出力します。
これは次のように短縮できます。
grep -cEx '.{7}'
-E
表現が今必要なので必要です拡張正規表現。この-x
フラグは、式が行全体と一致するように強制します。
スペースを計算せずに「単語文字」(英数字)にのみ興味がある場合は、次のように使用できます。
grep -cExw '.{7}'
フラグは一致を-w
「grep
単語」(英数字以外の文字で区切られた英数字文字列)として強制します。
何枚か数えてみたいならユニークこの条件を満たす行があり(これが「別の行」を解釈する方法です)、フラグのgrep
ない結果がおよびを通じてパイプされます。正確に7つの単語文字を含む一意の行数を計算します。-c
uniq
wc -l
grep -Exw '.{7}' | uniq | wc -l
スクリプトではこうなります。
grep -Exw '.{7}' "$1" | uniq | wc -l