私はファイルの最初の行が特定のパターンと一致することを確認し、一致した場合はファイルを印刷したいスクリプトを書いています。この目標をどのように達成できますか?
スキーマを確認する方法は?パターンを確認して出力に応じて何かをする方法がありますか..
編集:この質問を見てください。https://stackoverflow.com/questions/5536018/how-to-get-match-regex-pattern-using-awk-from-file
私はこのようにしたいが、そのうちの誰も私には適していません。デフォルトでは、最初の行が正規表現パターンと一致することを確認し、それに基づいてファイル行を印刷したいと思います。
ベストアンサー1
あなたはこれを行うことができますed
:
ed -s infile <<\IN 2>/dev/null
1s/PATTERN/&/
,p
q
IN
ここでの秘訣はPATTERN
オンラインで自分を置き換えることです1st
。ed
指定したパターンが存在しない場合はエラーが発生するため(ファイル全体の印刷)、,p
成功した場合にのみ実行されます。1s/PATTERN/&/
または以下を使用してsed
:
sed -n '1{
/PATTERN/!q
}
p' infile
q
最初の行が!
()と一致しない場合はこれがPATTERN
行われ、そうでない場合はp
すべての行が印刷されます。
または指摘したようにトビースペート、GNUを使用するsed
:
sed '1{/PATTERN/!Q}' infile
Q
と同じq
ですが、パターンスペースを印刷しません。