* awk(메타문자)

* awk(메타문자)

*가 어떻게 작동하는지 설명해 주실 수 있나요?

입력이 있습니다.

U         8649 275  Asia
Canada    3852 25   North America
China     3705 1032 Asia
USA       3615 237  North America
India     1267 746  -Asia
Mexico    762  78   -North America
France    211  55   Europe
Japan     144  120  Asia
England   94   56   Europe
cim 
B
BB

BBB

나는 명령을 시도했다

awk '/B*/' countries

출력은 다음과 같습니다

U         8649 275  Asia
Canada    3852 25   North America
China     3705 1032 Asia
USA       3615 237  North America
India     1267 746  -Asia
Mexico    762  78   -North America
France    211  55   Europe
Japan     144  120  Asia
England   94   56   Europe
cim 
B
BB

BBB

마지막 4줄만 출력될 것으로 예상됩니다. 여기에 이미지 설명을 입력하세요.

답변1

*모든 줄에 나타나는 설명의 "빈 문자열" 부분을 놓쳤습니다 .

awk에서 일치하나 이상비, 사용/B+/

답변2

B*빈 문자열과 일치합니다. 각 캐릭터 간에 일치하는 항목이 있습니다.모든철사.

이것은 당신을 위한 교육 도구입니다:

awk -v re='B+' '{ gsub(re, "(&)"); print }' file

awk프로그램은 주어진 표현식과 일치하고 각 일치 항목을 일치하는 내용으로 대체합니다(괄호 안에 있음). 완벽하지는 않지만 가장 간단한 교육 목적으로 사용됩니다.

sed일부 확장 정규 표현식의 경우 이에 상응하는 것은 다음과 같습니다 PATTERN.

sed -E 's/(PATTERN)/(&)/g' file

awk표현식을 사용하여 데이터에 대해 명령을 실행합니다 B+.

$ awk -v re='B+' '{ gsub(re, "(&)"); print }' file
U         8649 275  Asia
Canada    3852 25   North America
China     3705 1032 Asia
USA       3615 237  North America
India     1267 746  -Asia
Mexico    762  78   -North America
France    211  55   Europe
Japan     144  120  Asia
England   94   56   Europe
cim
(B)
(BB)

(BBB)

보시다시피 파일 맨 아래 세 줄에만 대문자가 포함되어 있으므로 B해당 줄만 일치합니다.

또 다른 예를 들면 다음과 같습니다 B.

$ awk -v re='B' '{ gsub(re, "(&)"); print }' file
U         8649 275  Asia
Canada    3852 25   North America
China     3705 1032 Asia
USA       3615 237  North America
India     1267 746  -Asia
Mexico    762  78   -North America
France    211  55   Europe
Japan     144  120  Asia
England   94   56   Europe
cim
(B)
(B)(B)

(B)(B)(B)

여기서는 각각 B개별적으로 일치합니다.

마지막으로 질문의 실제 표현(내 데이터가 탭으로 올바르게 구분되지 않았습니다)은 다음을 사용합니다 B*.

$ awk -v re='B*' '{ gsub(re, "(&)"); print }' file
()U() () () () () () () () () ()8()6()4()9() ()2()7()5() () ()A()s()i()a()
()C()a()n()a()d()a() () () () ()3()8()5()2() ()2()5() () () ()N()o()r()t()h() ()A()m()e()r()i()c()a()
()C()h()i()n()a() () () () () ()3()7()0()5() ()1()0()3()2() ()A()s()i()a()
()U()S()A() () () () () () () ()3()6()1()5() ()2()3()7() () ()N()o()r()t()h() ()A()m()e()r()i()c()a()
()I()n()d()i()a() () () () () ()1()2()6()7() ()7()4()6() () ()-()A()s()i()a()
()M()e()x()i()c()o() () () () ()7()6()2() () ()7()8() () () ()-()N()o()r()t()h() ()A()m()e()r()i()c()a()
()F()r()a()n()c()e() () () () ()2()1()1() () ()5()5() () () ()E()u()r()o()p()e()
()J()a()p()a()n() () () () () ()1()4()4() () ()1()2()0() () ()A()s()i()a()
()E()n()g()l()a()n()d() () () ()9()4() () () ()5()6() () () ()E()u()r()o()p()e()
()c()i()m() ()
(B)
(BB)
()
(BBB)

이는 끝에 있는 여러 문자 간의 일치를 B*제외하고 전체 파일의 모든 문자 간의 일치를 나타냅니다.B

[A-Za-z-][A-Za-z-]+또한 이를 사용하여 와 (당신이 저에게 물으셨습니다) 사이의 차이점을 보여줄 수도 있습니다.전에):

$ awk -v re='[A-Za-z-]' '{ gsub(re, "(&)"); print }' file
(U)         8649 275  (A)(s)(i)(a)
(C)(a)(n)(a)(d)(a)    3852 25   (N)(o)(r)(t)(h) (A)(m)(e)(r)(i)(c)(a)
(C)(h)(i)(n)(a)     3705 1032 (A)(s)(i)(a)
(U)(S)(A)       3615 237  (N)(o)(r)(t)(h) (A)(m)(e)(r)(i)(c)(a)
(I)(n)(d)(i)(a)     1267 746  (-)(A)(s)(i)(a)
(M)(e)(x)(i)(c)(o)    762  78   (-)(N)(o)(r)(t)(h) (A)(m)(e)(r)(i)(c)(a)
(F)(r)(a)(n)(c)(e)    211  55   (E)(u)(r)(o)(p)(e)
(J)(a)(p)(a)(n)     144  120  (A)(s)(i)(a)
(E)(n)(g)(l)(a)(n)(d)   94   56   (E)(u)(r)(o)(p)(e)
(c)(i)(m)
(B)
(B)(B)

(B)(B)(B)
$ awk -v re='[A-Za-z-]+' '{ gsub(re, "(&)"); print }' file
(U)         8649 275  (Asia)
(Canada)    3852 25   (North) (America)
(China)     3705 1032 (Asia)
(USA)       3615 237  (North) (America)
(India)     1267 746  (-Asia)
(Mexico)    762  78   (-North) (America)
(France)    211  55   (Europe)
(Japan)     144  120  (Asia)
(England)   94   56   (Europe)
(cim)
(B)
(BB)

(BBB)

관련 정보