2つの異なるパターン(PAT1とPAT2)の間のあらかじめ選択されたテキストから、パターン(xの後に数字)で始まる選択された行を印刷する2つのステップで必要な操作を実行するUNIXスクリプトがあります。
1)PAT1とPAT2を含む行を除いて、2つのモード(PAT1とPAT2)の間で事前に選択されたテキスト -この記事に基づいて
sed -n '/PAT1/,/PAT2/{/PAT1/!{/PAT2/!p;};}' file.txt > newfile.txt
2)あらかじめ選択されたテキストのパターン(xの後に数字)で始まり、選択した行を印刷します。
sed -n '/^x [[:digit:]]*/p' newfile.txt > newfile2.txt
1つのステップで同じ結果を得る方法はありますか?
このスクリプトを試しましたが機能しません(コードがブロックされ続けます)。
sed -e '/PAT1/,/PAT2/{/PAT1/!{/PAT2/!p;};}' ; '/^x [[:digit:]]*/p' file.txt > newfile.txt
私はLinuxではなくOSXで作業しています。
ベストアンサー1
最初の作業を少し調整するだけですsed
。
sed -n '/PAT1/,/PAT2/{/^x [[:digit:]]*/p;}' file.txt > newfile.txt
- 次の行に表示
PAT1
されない限り、&を除外しようとする必要はありません。PAT2
^x [0-9]
sed -n '/PAT1/,/PAT2/{/PAT1\|PAT2/!{/^x [0-9]*/p;};}' file.txt
PAT1
&も除外されます。PAT2
以下は何もしないようです。
sed -e '/PAT1/,/PAT2/{/PAT1/!{/PAT2/!p;};}' ; '/^x [[:digit:]]*/p'
^
最初のコマンド(sed
)はファイルから何も入力されていないので、standard input
キーボードの入力を待っているということです。
セミコロンは引用符で囲まれません。これは、ユーザーが提供するコマンドを解釈するために使用されるシェル構文の一部を構成します。簡単に言えば、上記の行の意味は次のとおりです。execute a command named 'sed', then execute a command named '/^x [[:digit:]]*/p'
- 言わないでください。