문자열이 있습니다:
onetwothree.file.001.txt ; threefourfive.file.0.98.txt ; fivefoursix.file.14.txt
.
나는 그것을 분할 하고 ;
파일 이름 앞의 접두사를 제거하여 다음과 같이 보이도록 하고 싶습니다 .
file.001.txt ; file.0.98.txt ; file.14.txt
어떤 아이디어가 있나요?
답변1
sed -e 's/[^.]*.//' -e 's/;[^.]*./; /g'
이는 처음부터 가장 짧은 부분 문자열을 제거한 .
다음 ;
결과 문자열에 대해 작업을 수행할 수 있습니다.
답변2
복용"배쉬에서"말 그대로 이런 일을 할 수 있습니다.
문자열을 세미콜론으로 구분된 배열로 분할합니다.
요소별로 접두사를 제거하고 결과를 IFS의 첫 번째 문자로 구분된 문자열에 저장합니다.
전역적으로 구분 기호 뒤에 공백을 다시 추가합니다.
IFS
참고: 나중에 복원할 수 있도록 현재를 저장하고 싶을 수도 있습니다 .
IFS=";"
read -a arr <<< "onetwothree.file.001.txt ; threefourfive.file.0.98.txt ; fivefoursix.file.14.txt"
printf -v str "${arr[*]#*.}"
printf "%s\n" "${str//;/; }"
진빙
file.001.txt ; file.0.98.txt ; file.14.txt
답변3
아니면 sed
...
s="onetwothree.file.001.txt ; threefourfive.file.0.98.txt ; fivefoursix.file.14.txt"
sed -E "s/(^|; )[^\.]+\./\1/g" <<<$s
연습
(^|; )[^\.]+\.
줄의 시작 부분이나 (세미콜론과 공백)으로 시작 ^
하고 |
그 ;
뒤에 [^\.]+\.
리터럴을 포함하지 않지만 .
다음 과 같은 연속 계열이 이어지는 하위 요소를 찾습니다.하다리터럴로 끝나다.
\1
그런 다음 캡처 그룹인 모든 것을 교체하십시오.(^|; )
산출
file.001.txt ; file.0.98.txt ; file.14.txt