구분 기호 앞의 텍스트를 제거하는 방법은 무엇입니까?

구분 기호 앞의 텍스트를 제거하는 방법은 무엇입니까?

텍스트 파일의 모든 줄에서 구분 기호 );앞뒤의 텍스트를 제거하는 데 도움이 필요합니다. |즉:

 SUBSCIBER_MSISDN=6289666195060');BEGIN DBMS_LOCK.SLEEP(5); END-- rKSy|

결과는 다음과 같아야합니다

SUBSCIBER_MSISDN=6289666195060|

이 섹션을 제거하는 방법을 아시나요? 이것은 큰 파일입니다.

꼭 사용해야 한다면 미칠 것 같아요 sed.

답변1

일부 입력 파일의 전체 행을 표시한다고 가정합니다.

sed "s/'.*/|/" file >newfile

'이렇게 하면 각 줄의 첫 번째 문자 뒤의 모든 내용이 한 |문자로 대체됩니다. 결과는 리디렉션을 통해 새 파일에 기록됩니다. sed작은따옴표로 묶인 문자열에는 작은따옴표 문자가 포함될 수 없기 때문에 표현식 주위에 큰따옴표를 사용하고 있습니다 .

샘플 데이터가 주어지면 이는 다음과 같습니다.

 SUBSCIBER_MSISDN=6289666195060|

줄 시작 부분에서도 공백을 제거하려는 경우(귀하의 예에서는 이렇게 하는 것 같습니다):

sed -e "s/'.*/|/" -e 's/^[[:blank:]]*//' file >newfile

또는,

sed "s/'.*/|/; s/^[[:blank:]]*//" file >newfile

역겹다면 다음 을 사용하여 똑같은 변환을 수행 sed할 수 있습니다 .awk

awk '{ sub("'"'"'.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile

펑키한 모양은 '"'"'인용된 작은따옴표입니다. awk코드를 구성하는 작은따옴표 문자열 외부에서는 큰따옴표로 묶어야 합니다 . 우리는 또한 사용할 수 있습니다 '\''.

awk '{ sub("'\''.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile

또는 작은따옴표 문자에 8진수 ASCII 코드를 사용할 수 있습니다.

awk '{ sub("\047.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile

관련 정보