문자열이 있습니다:
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