私は最近この解決策を見つけましたが、常に日付と時刻を含むコマンドを使用していたので効果がありました。つまり、私の場合、文字列はほぼ常に一意です。
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
答え2
ファイルの行の順序を変更してインポートします。最初数行を入力してもう一度置き換えます。
$ tac file | sed '/OPERATIONAL SYSTEMS TOMORROW:/q' | tac
OPERATIONAL SYSTEMS TOMORROW:
AIX
SOLARIS
これではないかもしれません。効率的なしかし、簡単なので、理解し、維持するのは簡単です。
このtac
ユーティリティはGNU coreutilsの一部です。
答え3
通常のshを使用してこれを行うことができます。
${VAR%%string}
ここで、$ VARには処理したいテキストが含まれています。
答え4
Perlの使用(awkとsedよりも高速):
$ cat temp.txt
OPERATIONAL SYSTEMS:
Windows
MAC OS
OPERATIONAL SYSTEMS TOMORROW:
Linux
Xubunto
Extra
OPERATIONAL SYSTEMS:
Windows
MAC OS
OPERATIONAL SYSTEMS TOMORROW:
AIX
SOLARIS
実装する:
$ perl -ne ' {
if ( $_ =~ /(OPERATIONAL SYSTEMS TOMORROW:)/ ) {$found=1;$index=0;}
if($found ) {$index++; $a[$index]=$_;} $last_index=$index;}
END {
for($i=1;$i<=$index;$i++){ print $a[$i];}
} ' temp.txt