이라는 파일에 다음 줄이 있습니다 ref.list
.
234 ./XYZ_SiteMetric_TIMESTAMP.dat
456 ./XYZ_Site_TIMESTAMP.dat
나는 그것들을 만들어야 합니다:
234 SiteMetric
456 Site
내 스크립트에서는 다음 명령을 사용합니다.
sed -i 's/\*SiteMetric\*/SiteMetric/g' ref.list
sed -i 's/\*Site\*/Site/g' ref.list
목록 파일에는 유사한 줄이 많이 있습니다.
을 사용하여 스크립트를 실행하면 sh -x
오류가 없으며 명령이 실행됩니다. 그러나 파일에는 아무것도 변경되지 않습니다.
참고: XYZ_
두 행의 부품은 항상 동일합니다. 하지만 timestamp
부품은 다릅니다.
답변1
임의 개수의 문자에 대한 구문은 입니다 .*
. *
이전 문자 또는 표현식과 일치하는 수만 나타냅니다. 즉, .*
표시된 일치 항목 수에 관계없이 .
모든 문자와 일치할 수 있습니다.
답변2
더 짧은 솔루션은 어떻습니까?
sed -ri -e 's%[.]/XYZ_(.*)_TIMESTAMP.dat%\1%' ref.list
모든 입력이 이 패턴을 따른다고 가정합니다.
답변3
Site/SiteMetric에 문자가 없고 _
(변수인지 확실하지 않음) 스키마가 정적이라고 가정하면 다음을 수행할 수 있습니다.
sed 's/\.[^_]*_//;s/_.*//;'
첫 번째 부분은 부분을 s
삭제 ./XYZ_
하고 두 번째 부분은 부분을 삭제합니다 _TIMESTAMP.dat
.