というファイルがありますfile.txt
。grep
コマンドを使用して最初の行のみを印刷するにはどうすればよいですか?
grep
ファイルの最初の行を印刷するのに最適なツールではありません。に一致する最初の行を単に印刷したいgrep
場合、またはの特定の用途がある場合はgrep
、それが何であるかをお知らせください。より多くの文脈があれば、おそらくあなたとコミュニティをよりよく助ける答えを与えることができます。
というファイルがありますfile.txt
。grep
コマンドを使用して最初の行のみを印刷するにはどうすればよいですか?
grep
ファイルの最初の行を印刷するのに最適なツールではありません。に一致する最初の行を単に印刷したいgrep
場合、またはの特定の用途がある場合はgrep
、それが何であるかをお知らせください。より多くの文脈があれば、おそらくあなたとコミュニティをよりよく助ける答えを与えることができます。
回答:
これはgrepの型破りなアプリケーションですが、次のようにして使用できます
grep -m1 "" file.txt
空の式が何にでも一致するため機能しますが-m1
、最初の一致後にgrepが終了します
-m NUM, --max-count=NUM
Stop reading a file after NUM matching lines.
grep: unknown option -- m
これは何かでgrep
はありません。「grep」という名前自体は、「正規表現をグローバルに検索して出力する」の頭字語です。これは、ed
コマンドg/re/p
が(特定の正規表現に対してre
)行うことです。
ed
は1969年のインタラクティブなラインエディタですが、今日でもほとんどの場合システムにインストールされています。我々は持ってgrep
からed
、それは、特定の機能のショートカットまたはエイリアスとして見ることができるed
、とsed
。これは。これは、「stream- ed
」、つまり(非対話型)ストリームエディターです。
sed
代わりに使用しましょう:
$ sed -n '1p' file.txt
1p
文字列は、小さなでsed
印刷(つまり「スクリプト」p
)指定されたアドレスに対応するライン(1
最初のライン)。編集コマンド1p
は(驚くことではないが)同じことをするed
ところでエディターでます。
の -n
我々が得るすべては、ファイルの最初の行であるので、明示的にスクリプトによって印刷されていないものの出力を抑制することができますfile.txt
。
代わりに:
$ sed '1q' file.txt
これはファイルのすべての行を印刷しますが、終了します(q
1行目(印刷後)で)されます。これは、とまったく同じhead -n 1 file.txt
です。
POSIX規格では、(一般化して)それhead -n N
はとほぼ同じですsed 'Nq'
(つまり、「すべての行を印刷しますが、行で終了しますN
」)。なぜhead
標準に含まれていたのかは、対称性tail
(および既存のUnix実装との後方互換性)によるものでした。
Grepのもう1つの型にはまらない使用法- シュワルツ変換は、いくつかの回転を経て行に番号を付け、次にgrepを使用して行番号を探し、行番号を削除します。
function grep1() (
nlines=$(wc -l < "$1")
nlw=$(printf "%d" "$nlines" | wc -c)
nl -d '\n' -ba -n ln -w "$nlw" -s ' ' "$1" | grep '^1 ' | sed 's/^1 *//'
)
function greplast() (
nlines=$(wc -l < "$1")
nlines=$((nlines + 0))
nlw=$(printf "%d" "$nlines" | wc -c)
nl -d '\n' -ba -n ln -w "$nlw" -s ' ' "$1" | grep "^$nlines " | sed "s/^$nlines *//"
)
この回答は、(grep、bash、または...など)で何かを実行できるからといって、そうすべきではないという考えの例としてここに入れています-おそらく、仕事のためのより良いツールがあるでしょう。sed(sed 1q
またはsed -n 1p
)およびhead(head -n 1
)は、ファイルの最初の行を印刷するためのより適切なツールです。ファイルの最後の行を印刷するために、あなたが持っていますtail -n 1
かsed -n '$p'
。これらのツールは単一のコマンドであるだけでなく(上記の機能の3つ以上ではありません)、将来の読者(おそらくあなた自身)にとってもはるかに明確です。-それらが入っているスクリプトの。私はあなたの質問の(現在3人の)ダウン投票者の1人ではありませんが、仕事のための任意のツールに対する(支持する理由なしでの)主張が理由である可能性がありますダウン票。それは持っているシステムがあることは極めてまれだgrep
も持っていないhead
、tail
とsed
。
head -1 file.txt
動作しませんか?