awk를 사용하여 파일의 줄을 변경합니다.
export textContent="verylongtextmorethan4K"
awk '{ if (NR == 200) print "${textContent}\"; else print $0}' a.txt > b.txt
그러나 행 텍스트 길이가 2K를 초과하면 작동하지 않습니다. 삽입되는 텍스트가 너무 길기 때문이라는 것을 깨달았습니다. 4K 긴 텍스트를 한 줄에 삽입하려면 이 문제를 어떻게 해결해야 합니까?
답변1
Perl에서는 그러한 제한이 없도록 설계되었습니다.
#!/usr/bin/perl
while (<>) {
if ($. == 200) {
print $ENV{'textContent'}, "\n";
}
else {
print;
}
}
또는 짧은 "oneliner" 버전:
#!/usr/bin/perl
while (<>) { print ($. == 200) ? ($ENV{'textContent'} . "\n") : $_; }
예를 들어 Perl 스크립트를 저장 x.pl
하고 실행하십시오.
perl x.pl a.txt > b.txt
또는 먼저 스크립트를 실행 가능하게 만듭니다.
chmod +x x.pl
./x.pl a.txt > b.txt
<>
입력의 다음 줄을 반환하고 EOF에서 false를 반환하므로 루프가 종료됩니다.
$.
현재 입력 줄 번호를 포함하는 Perl의 특수 변수입니다.
print
Perl은 인수로 전달된 항목에 자동으로 줄바꿈을 추가하지 않기 때문에 "\n"
첫 번째 버전에서는 print
환경 변수의 내용과 줄바꿈이 목록으로 전달되었으므로 쉼표가 사용되었습니다. 두 번째 버전에서는 삼항 연산자( ?
:
)가 목록이 아닌 값을 기대하기 때문에 함께 연결됩니다.
어쩌면 당신은 삼항 연산자에 익숙하지 않을 수도 있습니다. 다음과 같은 형식을 취합니다.
condition ? value1 : value2
조건이 true이면 을 반환하고, 그렇지 않으면 를 value1
반환합니다 value2
. 따라서 여기서 줄 번호가 200이면 매우 긴 줄이 반환되고, 그렇지 않으면 $_
현재 레코드(즉, 줄)의 내용이 반환됩니다.