마지막 밑줄 뒤와 파일 확장자 앞의 문자열을 제거하기 위해 Unix 명령을 사용하여 파일 내용을 편집하고 싶습니다.

마지막 밑줄 뒤와 파일 확장자 앞의 문자열을 제거하기 위해 Unix 명령을 사용하여 파일 내용을 편집하고 싶습니다.

두 번째 행의 두 번째 열(파일 이름)에 있는 파일의 내용을 편집하고 마지막 밑줄 뒤와 파일 확장자 앞 부분을 제거하고 싶습니다.

파일 내용은 다음과 같습니다. 파일 내용을 입력해주세요

No|filename|count
01 |com_101_00000_0001_a234.txt|100

결과 파일 내용

No|filename|count  
01 |com_101_00000_0001.txt|100

밑줄 수는 .ctl 파일에 있는 파일 이름에 따라 달라질 수 있습니다. 이와 같은 폴더에는 여러 개의 파일이 있으며 두 번째 줄의 모든 .ctl 파일 내용을 비슷하게 변경하고 싶습니다.

Operating system details Linux  2.6.32 -696.30.1.e16
GNU/linux

답변1

파일 내용을 변경하려면 정규 표현식을 사용하세요.

perl -pi -e 's/_[^_\.]+(\.)/$1/g' *

질문이 변경되기 전의 이전 답변은 정규식을 사용하여 파일 이름을 변경합니다.

rename 's/_[^_\.]+(\.)/$1/g' *

Perl로 작성되었기 때문에 이식성이 뛰어납니다.

http://man7.org/linux/man-pages/man1/rename.1.html

답변2

노력하다

awk -F\| -vOFS=\| 'NR==2 {sub (/_[^_]*\./,".", $2)}1' file
No|filename|count
01 |com_101_00000_0001.txt|100


NR==2       if record count is 2 (i.e. 2. line)
sub (       `awk` "substitute" function
/_[^_]*\./  regex: match string consisting of multiple non-underscores, delimited by leading underscore and trailing literal dot
,".",       with a literal dot
 $2)        in second field
1           do default action: print

필요한 경우 >임시 파일로 리디렉션 mv하거나 원본 파일로 돌아갑니다. 여러 파일의 경우 모든 관련 파일을 cp반복합니다 .for

관련 정보