sed를 사용하여 *\n.*\n=을 바꾸세요.

sed를 사용하여 *\n.*\n=을 바꾸세요.

파일에 제공된 텍스트는 다음과 같습니다.

oldValue
=null* 
persistedObjectId
="STRAN-2019-10420"* 
persistedObjectVersion
=0* 
propertyName
="Status"* 
uri
="/oms/salesOrder/saveSalesOrder"

"*"와 "=" 사이의 모든 항목을 어떻게 바꿀 수 있나요(반대 대신)? 사용 시도가 실패했습니다.

sed 's/\*\n.*\n=//g' filename.txt

답변1

문제는 sed한 줄씩 작동하므로 여러 줄 패턴이 일치하지 않는다는 것입니다. GNU를 사용하는 경우 sed옵션을 사용하여 -z동일한 버퍼의 모든 라인을 처리할 수 있습니다.

sed -z 's/\*[^=]*=//g' filename.txt

코드도 변경했습니다. 욕심이 많기 때문에 *사용 시 마지막 줄까지 모든 줄을 먹어치워서 다음 줄에서 멈추도록 변경했습니다.=.*[^=]*=

options 가 없으면 -z전체 파일을 직접 버퍼에 수집해야 합니다. 나는 보통 예약된 공간에 있는 모든 것을 수집하고 마지막 줄의 예약된 공간과 패턴 공간을 바꿉니다.

sed 'H;1h;$!d;x;s/\*[^=]*=//g'
  • H예약된 공간에 각 행을 추가합니다.
  • 1h파일 시작 부분에 개행 문자를 추가하지 않으려면 예약된 공간을 현재 줄로 덮어씁니다.
  • $!d마지막 행을 제외한 모든 행을 삭제하고 해당 행의 추가 처리를 중지합니다.
  • x다음은 마지막 라인에 대해서만 실행되어 두 공간을 교환하므로 예약된 공간에 모인 전체 파일이 이제 패턴 공간에 있게 됩니다.

관련 정보