質問: パターンを使用してテキストのブロックをgrepする 短いテキストファイルがあり、特別なパターンを使用してデータを出力する必要があります。私のファイル:99 test1 88 test2 10 test3 11 test1 12 test1 13 test2 14 test3 17 test1 18 test4 test1からtest2、test3へと1つずつ。だから...私はコマンドを書いた:sed '/test1.*\|test2.*\|test3/!d' filename そして出力で私は結果を持っています:99 test1 88 test2 10 test3 11 test1 12 test1 13 test2 14 test3 17 test1 この場合、私には必要のない行があります。11 test1 17 test1 この行は次々と行きません。どうすれば結果が得られますか?私を助けてください。ご清聴ありがとうございました。私はこの結果を得るはずです:99 test1 88 test2 10 test3 12 test1 13 test2 14 test3
回答: データがtestというファイルにあると仮定します。ここではワンライナーですが、sedはありません。cat test | tr '\n' '_' | grep -o '[0-9]*\stest1_[0-9]*\stest2_[0-9]*\stest3' | tr '_' '\n' この行が何をしているのか testの内容をtr '\n' '_'で複数行から1行に変更する test1、test2、およびtest3がgrep -o '[0-9]*\stest1_[0-9]*\stest2_[0-9]*\stest3'で他の部分より遅れている部分のみを取得します tr '_' '\n'を使用して1行から複数行に戻る