sed를 사용하여 연속된 2줄 바꾸기

sed를 사용하여 연속된 2줄 바꾸기

연속된 줄을 다음으로 바꾸려고 했습니다 sed.

sed -i -e '/string1/{N;s/string2/string2_replaced/;N;s/string3/string3_replaced}' file1

sed -i -e '/string1/{n;s/string2/string2_replaced/;n;s/string3/string3_replaced}' file1

여기서 file1에는 다음이 포함됩니다.

string1
string2
string3

나는 계속해서 sed: unmatched '/'. file1의 내용을 다음과 같이 변경하는 방법:

string1
string2_replaced
string3_replaced

그러면 string2와 string3은 연속된 줄에 있고 string1과 일치하는 줄 바로 뒤에 있는 경우에만 대체됩니까?

또한 string2가 정확히 어디에 나타나는지(어떤 행)는 확실하지 않지만 string1 뒤에 나타나는 것은 확실한 경우 string2를 검색하고 바꾸는 방법은 무엇입니까?

답변1

/다음과 같은 마지막 항목을 놓쳤습니다 s/string3/string3_replaced/.

sed -e '/string1/{N;s/string2/string2_replaced/;N;s/string3/string3_replaced/}' file1

sed모든 구현이 및 의 동일한 줄에서 여러 명령을 지원하는 것은 아닙니다 . 이식성을 위해:{}

sed -e '/string1/ {
  N
  s/string2/string2_replaced/
  N
  s/string3/string3_replaced/
}' file1

관련 정보