vim 바꾸기 사용 - 패턴 [...]을 문자열로 바꾸기

vim 바꾸기 사용 - 패턴 [...]을 문자열로 바꾸기

다음 형식의 줄이 포함된 파일이 있습니다.

[[email protected], [email protected]], Payment processed - 23499, params = {'invoice':3243}

계좌번호 23499만 알고 싶습니다. 숫자입니다. 그것에 대해 이야기합시다 <account>. 그것은 상수가 아닙니다.

이를 위해 열심히 노력하고 있습니다——

  1. 제거하다params ...
  2. 각 줄의 시작 부분에 있는 [...]를 공백으로 바꿉니다.

나는 ...어떤 문자열을 의미합니다. 열심히 노력했어요 -

# 1
:%s/params.*//g
# 2
:%s/\<[]\>//g
:%s/\<\[\]\>//g
:%s/\<[.*]\>//g
:%s/\<\[.*\]\>//g

내가 시도한 모든 것이 # 2효과가 없었습니다. 내가 뭘 잘못했나요? 그것을 얻는 방법 <account>? 돕다.

답변1

다음 순서에 따라 계정만 유지할 수 있습니다.(JDMMohr에게 Cudo)
명령에서 r 뒤의 공백에 주의하세요.

:%norm $F,d$Bhv0r 

,이는 유지하려는 번호 뒤에만 다음이 따른다고 가정합니다.

무너지다

:     -> Enter command mode
%norm -> Applies a normal command to the entire file
$     -> Jump to end of line
F,    -> Find preceding ,
d$    -> Delete until end of line
B     -> Jump back a word
hv0   -> Go left one character and select until beginning of line
r     -> replace selected text with <space>

답변2

<account>문자열 만 가져오기

awk '{print $6}' file| sed 's/,//' >> newfile

이는 향후 사용될 수 있는 기본 데이터에 유용할 수 있습니다.

답변3

질문의 원래 버전에서와 같이 <account>(그런 것 <12345>) 을 찾고 있고 in 만 가지고 있다면 다음과 <같이 작동합니다.><account>

%s/\v.*(\<.*\>).*/\1/

(그룹 내에서) 사이의 모든 항목과 해당 줄 앞과 뒤의 모든 항목 <과 일치 합니다 . >이것은 단순히 그룹으로 대체됩니다.

업데이트된 질문에 대한 답변:

그렇지 않지만 여기에 및 :가 <account>없는 숫자가 있는 경우 비슷한 방식으로 작동합니다.<>

%s/\v.* - ([0-9]*), params =.*/\1/

숫자를 일치시켜 그룹으로 저장합니다. , params =줄의 시작이나 끝까지 앞에 "-"로 끝나는 모든 항목과 그 뒤에 "-"로 시작하는 모든 항목과 일치합니다 .
따라서 표현식은 전체 줄과 일치하고 숫자를 포함하는 일치하는 그룹으로 대체됩니다.

이는 \v"매우 마법 같은" 정규 표현식 에 사용됩니다 :help /magic. 를 참조하세요.

답변4

vim사용하기가 sed쉬울 수도 있지만 awk실제로는 이러한 유형의 일치 및 교체를 직접 수행하는 것이 전적으로 가능합니다.

$ awk '{ sub(/^.* - /, ""); sub(/,.*$/, ""); print $0 }' file
23499

위의 내용은 모든 것과 일치합니다( awk내장된sub()기능) 줄의 시작 부분부터 계좌 번호 앞에 하이픈과 공백을 넣고 빈 문자열로 바꿉니다 "". 그런 다음 쉼표부터 줄 끝까지의 모든 항목을 일치시키고 이를 빈 문자열로 바꿉니다. 이렇게 하면 (즉, 이메일 수나 형식에 관계없이) 계좌 번호를 제외한 모든 항목이 효과적으로 삭제됩니다.

액세스 권한이 있는 경우 gawk더 간단한 솔루션을 사용할 수 있습니다(함수 호출은 하나만 필요함).

$ gawk 'match($0, /^.* - ([0-9]+),.*$/, a) { print a[1] }' file
23499

물론 위 솔루션은 새 데이터 를 stdout. 당신이 사용할 수있는 .> newfile>>>

awk자체적으로 많은 제한이 있으므로(예: 많은 파일을 동시에 처리) 항상 이러한 작업에 가장 적합한 도구는 아닙니다. 하지만 기능이 뛰어나므로 사용 사례가 라운드하우스와 일치할 때 사용하는 것이 좋습니다.

또한 위의 솔루션에는 대화형 인터페이스(예: vim)가 필요하지 않으며 파이프도 필요하지 않습니다.

관련 정보