텍스트 한 줄을 두 줄로 나누는 Bash 명령

텍스트 한 줄을 두 줄로 나누는 Bash 명령

텍스트 파일에서 이 줄을 원합니다

This is to become line 1 and that is line 2

다음과 같이 두 줄로 나눕니다.

This is to become line 1
and that is line 2

나는 개별 문자가 아닌 어떤 것도 편집/잘라내기/삭제하고 싶지 않으며 단지 한 줄이 아닌 두 줄의 텍스트로 끝나고 분할 위치를 결정할 수 있기를 원합니다. sed또는 을 사용하여 이 작업을 어떻게 수행할 수 있습니까 awk? split어느 것을 사용하는지는 크게 걱정하지 않지만 sed가능하다면 더 선호합니다...

답변1

"and"라는 단어에서 줄을 분할하려는 경우에 이 방법이 작동합니다.

echo "This is to become line 1 and that is line 2" | sed 's/and/\nand/g' 
This is to become line 1 
and that is line 2

마일리지는 사용하는 sed 버전에 따라 달라질 수 있습니다.

고쳐 쓰다:

분할하려면 두 번째 줄의 시작 부분으로 사용하려는 용어/요소 앞에 "\n"을 추가하면 됩니다.

echo "Sun rise: <...strong...>07:24 am<../..strong..><..br ../..> Sun set: <..strong..>07:31 pm<../..strong..><..br.. /..> " | sed 's/Sun set/\nSun set/'
Sun rise: <...strong...>07:24 am<../..strong..><..br ../..> 
Sun set: <..strong..>07:31 pm<../..strong..><..br.. /..> 

답변2

필요한 경우 변경할 awk수 있도록 개인 구현을 추가했습니다 .separator

echo "line 1 and line 2" | awk -v separator="and" 'BEGIN {FS=separator} $0 ~ separator {printf "%s\n%s%s", $1,FS,$2}'

awk나는 변수를 쉽게 사용할 수 있기 때문에 항상 사용하는 것을 선호합니다 . 다른 라인을 기준으로 라인을 분할하려는 경우구분 기호separator, 값을 다른 값으로 간단히 변경할 수 있습니다 .

두 번째 줄에서 제거하려는 경우 separator(내 말은 "읽고 싶지 않다는 뜻입니다.그리고 2호선"하지만"2호선"):

echo "line 1 and line 2" | awk -v separator="and " 'BEGIN {FS=separator} $0 ~ separator {printf "%s\n%s", $1,$2}'

관련 정보