이 패턴을 모두 포함하는 파일이 많이 있습니다 SIZE1=%d
. 해당 소수점을 찾아 각 파일 이름에 접두사를 추가하는 방법이 있습니까 %d_
?
또한 모든 파일이 포함된 경우 SIZE1=%d
모든 SIZE2=%e
파일 이름에 접두사를 추가할 수 있습니까 %d_%e_
?
sed
나는 이것에 경험이 없기 때문에 내가 얼마나 할 수 있는지 알아보려고 노력하고 있습니다 .
편집: 예를 들어 test_result.log
파일 어딘가에 별도의 줄이 있고 파일 이름 SIZE1=100
을 .SIZE2=150
100_150_test_result.log
답변1
GNU sed를 사용하면 2단계 sed 호출로 이를 수행할 수 있습니다. 먼저 몇 가지 테스트 데이터를 생성합니다.
for i in {1..10}; do
if (( RANDOM%2 )); then
echo SIZE1=$((RANDOM%10)) > test$i.log
else
echo SIZE1=$((RANDOM%10)) SIZE2=$((RANDOM%10)) > test$i.log
fi
done
생성된 데이터를 확인합니다.
head test*
산출:
==> test10.log <==
SIZE1=7
==> test1.log <==
SIZE1=5
==> test2.log <==
SIZE1=4 SIZE2=1
==> test3.log <==
SIZE1=9
==> test4.log <==
SIZE1=9 SIZE2=8
==> test5.log <==
SIZE1=6
==> test6.log <==
SIZE1=6
==> test7.log <==
SIZE1=5
==> test8.log <==
SIZE1=4 SIZE2=3
==> test9.log <==
SIZE1=3 SIZE2=8
SIZE1
sum first 를 포함하는 모든 파일 을 찾으려면 SIZE2
단락 모드, 즉 b
성공적인 일치 후 다음 파일로 분기( )를 사용합니다.
매개변수 추출.sed
/.*SIZE1=([0-9]+).*SIZE2=([0-9]+).*/ { F; s//\n\1_\2_\n/; p; b; }
/.*SIZE2=([0-9]+).*SIZE1=([0-9]+).*/ { F; s//\n\2_\1_\n/; p; b; }
/.*SIZE1=([0-9]+).*/ { F; s//\n\1_\n/; p; b; }
매개변수와 파일 이름이 있으면 필요한 명령을 작성합니다.
cmds.sed 생성
N
s/([^\n]*)\n(.*)$/mv \1 \2\1/
다음과 같이 실행하세요:
sed -znsEf extract-params.sed test* | sed -Ef create-cmds.sed
산출:
mv test1.log 5_test1.log
mv test2.log 4_1_test2.log
mv test3.log 9_test3.log
mv test4.log 9_8_test4.log
mv test5.log 6_test5.log
mv test6.log 6_test6.log
mv test7.log 5_test7.log
mv test8.log 4_3_test8.log
mv test9.log 3_8_test9.log
mv test10.log 7_test10.log
이제 이를 쉘에 파이프로 연결하거나 GNU sed의 /e
모드 수정자를 사용할 수 있습니다.