*가 어떻게 작동하는지 설명해 주실 수 있나요?
입력이 있습니다.
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
답변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)