sed 공백 와일드카드가 포함된 줄 바꾸기

sed 공백 와일드카드가 포함된 줄 바꾸기

내 파일에는 1500줄이 있고 줄 번호 1449를 변경하고 싶습니다. 다음 명령을 사용할 수 있다는 것을 알고 있습니다.

sed -i '1449s/"'$' == $rdn{ strlen($rdn) - 1 })"/'$' == $rdn[ strlen($rdn) - 1 ])/' file_name

하지만 작동하지 않습니다. 나는 바꾸고 싶다

'$' == $rdn{ strlen($rdn) - 1 })  

도착하다

'$' == $rdn[ strlen($rdn) - 1 ])

sed에서 지정된 줄 번호로 바꾸는 방법을 아는 사람이 있으면 안내해 주세요.

답변1

문제는 줄 번호 sed나 따옴표가 아닙니다. 작은 따옴표 안에 큰 따옴표를 중첩할 수 없으므로 '1449s/"'일치하는 작은 따옴표가 있으므로 스크립트 1449s/"$ ==는 등으로 시작됩니다.

그렇지 않은 경우 패턴이 고유할 수 있으므로 '$'작은따옴표만 사용할 수 있습니다.

sed -i '1449s/ == $rdn{ strlen($rdn) - 1 })/ == $rdn[ strlen($rdn) - 1 ])/' file_name

또는 전체 내용을 큰따옴표로 묶었지만 $셸에서 이스케이프해야 합니다.

sed -i "1449s/'\$' == \$rdn{ strlen(\$rdn) - 1 })/'\$' == \$rdn[ strlen(\$rdn) - 1 ])/" file_name

또는 마지막으로 줄에 아무것도 포함되어 있지 않거나 {바꾸려 }는 줄만 제외하면 다음 y명령을 사용할 수 있습니다.

sed -i '1449y/{}/[]/' file_name

답변2

sed  -i -e "1449s/})$/])/g" -e "1449s/{ strlen/[ strlen/g" filename

산출

'$' == $rdn[ strlen($rdn) - 1 ])

관련 정보