일부 문자열로 시작하는 다음 줄 끝에서 캐리지 리턴을 제거하고 이전 개행을 제거하는 동안 줄 시작 부분에 "and"를 "and"로 변경하는 것과 같은 내용을 삽입해야 합니다.
즉, 이것을 어떻게 변경합니까?
tomato
ham
and eggs
BLT
peanut butter
and jelly sandwich
이것에 들어가나요? :
tomato
ham and eggs
BLT
peanut butter and jelly sandwich
답변1
줄이 NUL 문자로 구분되도록 sed
with 옵션을 사용한 후 다음과 같이 일치 항목을 변경합니다.-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
변수에 줄을 누적 하는 데 사용됩니다 . 현재 줄이 로 시작하지 않으면 누적 줄(있는 경우)을 인쇄하고 현재 줄로 재설정합니다 .hold
and
and
hold