*がどのように機能するかを説明できますか?
入力があります。
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で一致1つ以上雨、使用/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)
ご覧のとおり、ファイルの下部の3行にのみ大文字が含まれているため、その行のみが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)