以下は私のファイルです
$ cat README
login user1
run .profile
cd /u/opt
unzip -l zip file
copy files in zip file to .orig
unzip -o the zip file
cd /u/opt/install
./reqe21.sh
sqlplus admin/<password> @req.sql
logout
最後に、一致する文字列の間に行が必要ですunzip
。つまり、logout
希望の出力は次のようになります。
cd /u/opt/install
./reqe21.sh
sqlplus admin/<password> @req.sql
答えが必要です。
- 試してみると、
sed -n '/unzip -o /,/logout/p' README
一致する行は除外されません。
したがって、次のような結果が得られます。
unzip -o the zip file
cd /u/opt/install
./reqe21.sh
sqlplus admin/<password> @req.sql
logout
ここで提供されている他のソリューションを試しました。sedから範囲パターンに一致する行を除外する方法は?
しかし、望む結果は出ません。以下を参照してください。
$ sed '1,/unzip/d;/logout/,$d' README
copy files in zip file to .orig
unzip -o the zip file
cd /u/opt/install
./reqe21.sh
sqlplus vrcadmin/<password> @req.sql
sed
最後と最後unzip
の間の行logout
、つまり以前に共有された希望の出力を取得するためにどのように使用できますか?
ベストアンサー1
これは単にsedが最も適切な仕事ではありません。この試み:
$ tac file | awk '/unzip/{exit} f; /logout/{f=1}' | tac
cd /u/opt/install
./reqe21.sh
sqlplus admin/<password> @req.sql
または何らかの理由で1つのツールのみを使用したい場合:
$ awk '/logout/{f=0} f{rec=rec $0 ORS} /unzip/{rec=""; f=1} END{printf "%s", rec}' file
cd /u/opt/install
./reqe21.sh
sqlplus admin/<password> @req.sql