19개의 열이 있는 탭으로 구분된 파일이 있는데 그 중 일부 끝에는 쉼표가 포함되어 있습니다. 이 쉼표가 끝에 있으면 모든 열에서 제거하고 싶습니다. 예:
c1 c2 c3 c4 c5
re, f,f d,f, gf mk
df df, df dl, df,
결과는 다음과 같은 파일에 저장되어야 합니다.
c1 c2 c3 c4 c5
re f,f d,f gf mk
df df df dl df
답변1
다음을 수행할 수 있습니다.
perl -i -pe 's/,(\t|$)/$1/g' file
그러면 쉼표 뒤에 공백, 탭 또는 개행 문자가 제거됩니다.
예를 들어 다른 필드 구분 기호의 경우 다음을 :
사용합니다.
perl -i -F: -lane 's/,$// for @F; print join ":",@F' file
이 명령은 원본 파일을 변경합니다, 먼저 삭제 -i
하고 테스트해 보세요.
답변2
각 필드 끝에 있는 단일 쉼표를 제거하려면 다음을 수행하십시오.
perl -i -pe 's/,(\t|$)/$1/g' myfile
(\t|$)
탭 문자 또는 줄 끝과 일치합니다. s/…/…/g
패턴의 각 발생(here ,(\t|$)
)을 지정된 대체 텍스트(here $1
, 패턴의 대괄호로 묶인 부분을 나타냄)로 바꿉니다. 쉼표로 끝나지 않는 필드는 패턴과 일치하지 않으므로 변경되지 않고 인쇄됩니다.
이것-p
옵션Perl에게 주어진 표현식을 각 입력 라인에 적용하고 수정된 라인을 인쇄하도록 지시합니다. 이것-i
옵션입력 파일이 결과 출력으로 대체됩니다.
답변3
다음은 훌륭한 둘러보기 콘텐츠입니다..
perl -i -pe 's/,(?=\t|$)//g' file
또는
perl -i -pe 's/,(?!\S)//g' file
또는
단어가 아닌 경계를 사용하십시오..
perl -i -pe 's/,\B//g' file