두 번째 행의 두 번째 열(파일 이름)에 있는 파일의 내용을 편집하고 마지막 밑줄 뒤와 파일 확장자 앞 부분을 제거하고 싶습니다.
파일 내용은 다음과 같습니다. 파일 내용을 입력해주세요
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로 작성되었기 때문에 이식성이 뛰어납니다.
답변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