"\nX"를 "Y"로 변경하세요.

"\nX"를 "Y"로 변경하세요.

일부 문자열로 시작하는 다음 줄 끝에서 캐리지 리턴을 제거하고 이전 개행을 제거하는 동안 줄 시작 부분에 "and"를 "and"로 변경하는 것과 같은 내용을 삽입해야 합니다.

즉, 이것을 어떻게 변경합니까?

tomato
ham
and eggs
BLT
peanut butter
and jelly sandwich

이것에 들어가나요? :

tomato
ham and eggs
BLT
peanut butter and jelly sandwich

답변1

줄이 NUL 문자로 구분되도록 sedwith 옵션을 사용한 후 다음과 같이 일치 항목을 변경합니다.-z

sed -z 's/\nand/ and/g' infile

일부 sed구현에서는 다음과 같이 실제 새 줄을 지원합니다.

sed 's/
and/ and/g' infile

답변2

sed에서 (전체 파일을 사용하지 않고) 이 작업을 수행하는 일반적인 방법은 다음과 같습니다.

sed -e :a -e '$!N;s/\nand/ and/;ta' -e 'P;D' file

전임자.

$ sed -e :a -e '$!N;s/\nand/ and/;ta' -e 'P;D' file
tomato
ham and eggs
BLT
peanut butter and jelly sandwich

예시 보기Sed 한 줄 설명, 1부: 파일 간격, 번호 매기기, 텍스트 변환 및 교체,40. 이전 줄이 등호 "="로 시작하는 경우 이전 줄 뒤에 줄을 추가합니다.

답변3

$ awk 'function p() { if (hold != "") print hold } /^and/ { hold = hold OFS $0; next } { p(); hold = $0 } END { p() }' file
tomato
ham and eggs
BLT
peanut butter and jelly sandwich

이는 문자열로 시작하는 줄이 발견될 때마다 호출되는 awk변수에 줄을 누적 하는 데 사용됩니다 . 현재 줄이 로 시작하지 않으면 누적 줄(있는 경우)을 인쇄하고 현재 줄로 재설정합니다 .holdandandhold

관련 정보