후행 새 줄 없이 파일의 세 번째와 다섯 번째 줄을 스크립트 출력에 결합하고 싶습니다.
다음 코드를 사용하여 이 구성을 달성할 수 있습니까?
{
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에 지시하는 옵션이 있습니다. 3p
sed에게 세 번째 줄을 인쇄하라고 지시하는 명령입니다. 마찬가지로 5p
if를 사용하여 다섯 번째 줄을 인쇄합니다.
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