다음 grep
명령은 문자열이 포함된 파일을 반환합니다 ptrn
. 이 sed
명령은 stp
.
grep -rl "${isufx[@]}" -e "$ptrn" -- "${fdir[@]}" |
sed "${sta}~${stp}!d" >> $logfl
이것이 결과가 될 것이다
cat /home/flora/logs/27043-T13:09:44.893003954.log
file1.sh
file2.sh
file3.sh
file4.sh
file5.sh
file6.sh
나는 다음과 같은 결과를 얻고 싶다
cat /home/flora/logs/27043-T13:09:44.893003954.log
File: file1.sh
+ file2.sh
+ file3.sh
+ file4.sh
+ file5.sh
+ file6.sh
하지만 사람들이 그렇게 할 수는 없을 것 같아요 grep
. 일부는 awk
파일에 사용하는 것을 제안할 수도 있습니다 logfl
.
답변1
GNU rettools(당신이 언급한 것)를 사용하세요댓글에서귀하의 또 다른 질문):
: >output
recins -f File -v "$(cat logfile)" output
그러면 이름이 지정된 파일이 생성되거나 지워지고 값이 파일의 내용인 이름이 output
지정된 필드가 삽입됩니다 .File
logfile
GNU Recfile 형식 에서 +
이러한 문자는 개행 문자로 처리되므로 위 작업은 삽입됩니다.단일 값, 개행 문자가 포함되어 있습니다.
각 파일 이름을 별도의 요소로 삽입하려면 다음을 사용할 수 있습니다.
: >output
xargs -I {} recins -f File -v {} output <logfile
위 코드는 recins
행당 한 번씩 호출되며 logfile
각 행에 대해 별도의 키-값 쌍을 삽입합니다.
입력을 CSV 파일로 두면 이 작업을 더 효율적으로 수행할 수 있습니다.
{ echo File; cat logfile; } | csv2rec >output
echo
이 명령은 여기에서 입력 데이터 앞에 CSV 헤더를 추가하는 데 사용됩니다 csv2rec
.
답변2
나는 이렇게 문제를 해결했다.
grep -rl "${isufx[@]}" -e "$ptrn" -- "${fdir[@]}" |
sed '1s/^/File: /;1!s/^/+ /' >> $logfl