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

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

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

 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

관련 정보