ph.lst
다음 레코드가 포함된 파일( )이 있습니다 . 다음 숫자를 제거해야 합니다 .txt
. 숫자는 무작위로 생성되므로 항상 동일할 것이라고 기대할 수는 없습니다.
test_wkly_20200428010453_PD.txt.1589553864|test_wky|05-01-2020 16:07:53|35858
삭제하고 싶습니다 .1589553864
. 내 출력은 다음과 같아야 합니다.
test_wkly_20200428010453_PD.txt|test_wky|05-01-2020 16:07:53|35858
나는 열심히 노력했다
sed -i 's/\.[0-9]$*//' ph.lst
도와주세요
답변1
다음 sed
명령을 시도해 보세요.
sed -i 's/txt\.[0-9]*/txt/' ph.lst
다음 숫자 중 원하는 수를 txt.
로 바꿉니다 txt
.
답변2
당신은 명령을 시도했다고 말했습니다.
sed -i 's/\.[0-9]$*//' ph.lst
딱 하나만매우 작은뭔가 잘못되었다. 줄의 끝 부분과 일치 $
하지만 그 지점에서 일치시키려는 것은 아닙니다. 대신에
sed 's/\.[0-9]*//' ph.lst
또는,
sed 's/\.[[:digit:]]*//' ph.lst
이렇게 하면 각 입력 줄의 첫 번째 점(및 점) 바로 뒤에 나타나는 모든 숫자가 제거됩니다. 출력은 표준 출력에 기록되므로 새 파일로 리디렉션할 수 있습니다.
그걸로 awk
당신도 같은 일을 하게 될 거예요
awk -F '|' 'BEGIN { OFS=FS } { sub("\.[[:digit:]]*", "", $1) }; 1' ph.lst
ph.lst
이렇게 하면 구분된 필드의 행을 구문 분석 |
하고 with와 동일한 정규식을 사용하여 하위 문자열을 제거합니다 sed
(여기서는 첫 번째 필드에서만 작동함).