한 줄로 출력하려면 모든 줄을 연결하세요.

한 줄로 출력하려면 모든 줄을 연결하세요.

후행 새 줄 없이 파일의 세 번째와 다섯 번째 줄을 스크립트 출력에 결합하고 싶습니다.

다음 코드를 사용하여 이 구성을 달성할 수 있습니까?

{
 echo 'Some text'
 echo 'Some text'
 echo -n 'Some text'
 cat text
 cat text
 echo -n 'Some text'
 echo 'Some text'
} > file

cat 뒤에 몇 가지 옵션을 추가하면 되나요?

파일의 라인 3과 5가 text각각 3과 5라고 가정합니다. 처리 후에는 다음 형식을 취해야 합니다.

 Some text 
 Some text
 Some text35Some text
 Some text

내가 올바르게 이해했다면 내 경우에는 sed 명령의 구현이 끔찍했습니다.

답변1

sed 사용

text내가 이해한 바로는 다음 과 유사한 파일이 있습니다 .

$ cat text
1
2
3
4
5

또한 행 3과 5를 추출하여 일부 명령문 중간에 배치하려고 합니다 echo. 이 경우 다음을 시도해 보세요.

$ {  echo 'Some text';  echo 'Some text';  echo -n 'Some text';  echo -n "$(sed -n 3p text)$(sed -n 5p text)";  echo 'Some text';  echo 'Some text'; } >file
$ cat file
Some text
Some text
Some text35Some text
Some text

단순화하다

위 작업은 echo다음 명령 하나로 완료할 수 있습니다.

$ echo $'Some text\nSome text\nSome text'"$(sed -n 3p text)$(sed -n 5p text)"$'Some text\nSome text' >file
$ cat file
Some text
Some text
Some text35Some text
Some text

또는 단일 printf명령으로:

$ printf 'Some text\nSome text\nSome text%s%sSome text\nSome text\n' "$(sed -n 3p text)" "$(sed -n 5p text)" >file
$ cat file
Some text
Some text
Some text35Some text
Some text

sed 명령의 작동 방식

예를 들어 위의 sed 명령을 사용하십시오.

sed -n 3p text

여기에는 -n우리가 명시적으로 요청하지 않는 한 아무것도 인쇄하지 않도록 sed에 지시하는 옵션이 있습니다. 3psed에게 세 번째 줄을 인쇄하라고 지시하는 명령입니다. 마찬가지로 5pif를 사용하여 다섯 번째 줄을 인쇄합니다.

awk를 사용하세요

awk 솔루션(팁: Runium):

awk '
    BEGIN{
        printf "%s","Some text\nSome text\nSome text"
    }
    NR>5 {exit}
    NR==3 || NR==5 {printf "%s", $0}
    END{
        printf "%s","Some text\nSome text\n"
    }' text

관련 정보