최근에 이 솔루션을 찾았는데 항상 날짜와 시간이 포함된 명령을 사용하기 때문에 효과가 있었습니다. 즉, 제 경우에는 문자열이 거의 항상 고유합니다.
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