特定の文字列の前のすべてのテキストを削除する方法

特定の文字列の前のすべてのテキストを削除する方法

私は最近この解決策を見つけましたが、常に日付と時刻を含むコマンドを使用していたので効果がありました。つまり、私の場合、文字列はほぼ常に一意です。

sed -n -i '/some_string_here/,$p' file_here

ただし、最近は他の種類の文字列(日付と時刻を除く)を使用する必要があります。

問題は、このソリューションが最初の発生でのみ機能することです。

[oracle@server1 ~]$ cat arquivo
OPERATIONAL SYSTEMS:
Windows
MAC OS
OPERATIONAL SYSTEMS TOMORROW:
Linux
Xubunto
OPERATIONAL SYSTEMS TOMORROW:
AIX
SOLARIS

[oracle@server1 ~]$ sed -n -i '/OPERATIONAL SYSTEMS TOMORROW:/,$p' arquivo
[oracle@server1 ~]$ cat arquivo
OPERATIONAL SYSTEMS TOMORROW:
Linux
Xubunto
OPERATIONAL SYSTEMS TOMORROW:
AIX
SOLARIS

最後の項目から最後の項目まで内容を印刷するには、次の作業を行う必要がありますOPERATIONAL SYSTEMS TOMORROW:

[oracle@server1 ~]$ cat arquivo
OPERATIONAL SYSTEMS:
Windows
MAC OS
OPERATIONAL SYSTEMS TOMORROW:
Linux
Xubunto
OPERATIONAL SYSTEMS TOMORROW:
AIX
SOLARIS

[oracle@server1 ~]$ sed -n -i 'some command for it' arquivo
[oracle@server1 ~]$ cat arquivo
OPERATIONAL SYSTEMS TOMORROW:
AIX
SOLARIS

どうすればいいですか?

ベストアンサー1

これは次のとおりですsed

sed -n 'H; /^OPERATIONAL SYSTEMS TOMORROW:/h; ${g;p;}' arquivo

出力:

OPERATIONAL SYSTEMS TOMORROW:
AIX
SOLARIS

ファイルをその場で編集するには:

sed -i -n 'H; /^OPERATIONAL SYSTEMS TOMORROW:/h; ${g;p;}' arquivo

おすすめ記事