파일의 특정 줄에 일련 번호를 추가하고 다른 파일에 추가하는 명령을 알려줄 수 있는 사람이 있습니까?
예: 5개의 파일(메시지)이 있습니다. 각 메시지 파일의 5번째 줄에 제목: 1, 제목: 2, 제목: 3...과 같은 증분 시퀀스 번호를 추가하고 싶습니다. 샘플 출력은 다음과 같습니다.
File1: line5: Subject: **1** message
File2: line5: Subject: **2** message
File3: line5: Subject: **3** message
File4: line5: Subject: **4** message
File5: line5: Subject: **5** message
답변1
다음 명령을 사용해 보았더니 정상적으로 작동했습니다.
for i in 5; do sed -i ''$i'i subject '$i'' file1;j=$(($i+1)); sed -i ''$i'i subject '$j'' file2;k=$(($j+1)); sed -i ''$i'i subject '$k' ' file3;l=$(($k+1));sed -i ''$i'i subject '$l'' file4;m=$(($l+1)); sed -i ''$i'i subject '$m'' file5;done
답변2
나는 다음을 사용할 것이다 perl
:
perl -pi -e 's/^Subject: \K/sprintf("%05d ", ++$n)/e' File*
Subject:
줄이 나타날 때마다 증가하는 숫자(너비 5까지 패딩 0)가 추가됩니다.
첫 번째 발생에만 해당:
perl -pi -e '
unless ($found_already) {
$found_already = 1 if s/^Subject: \K/sprintf("%05d ", ++$n)/e
}
$found_already = 0 if eof' File*
Subject: <increasing-number>
각 파일의 5번째 줄에 추가하려면 :
perl -pi -e '$_ = sprintf("Subject: %05d %s", ++$n, $_) if $. == 5;
close ARGV if eof' File*
파일은 쉘의 glob 확장에 따라 결정된 순서대로 Perl에 제공됩니다. 대부분의 쉘에서는 이것이 어휘 순서입니다. 파일 이름 번호가 채워지지 않은 경우 File10
이는 에 표시된다는 의미입니다 File2
. zsh
셸을 사용하면 숫자로 정렬된 목록 File*
으로 바꾸거나 파일의 수명(가장 오래된 것부터 가장 어린 것까지)으로 정렬할 수 있습니다.File*(n)
File*(Om)