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

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

나는 텍스트 파일의 이 줄을 원합니다

This is to become line 1 and that is line 2

다음과 같이 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}'

관련 정보