특정 문자열 앞의 모든 텍스트를 삭제하는 방법

특정 문자열 앞의 모든 텍스트를 삭제하는 방법

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

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

관련 정보