missing-semester 3์ผ ์ฐจ, Practice 8๋ฒ
VIM
/ WSL
/ LINUX
Vim
์ Linux
์ ๋ํ์ ์ธ ํธ์ง๊ธฐ์ธ vi
์ ํธํ๋๋ ํ
์คํธ ํธ์ง๊ธฐ์ด๋ค.
Vim
์ ์ฌ๋ฌ๊ฐ์ง ๋ชจ๋๋ฅผ ํตํด ํ์ผ์ ์ ๊ทผํ๊ณ ์ด๋ฅผ ์ถ๊ฐ/์์ /์ ๊ฑฐํ ์ ์๋ค.
์ฌ์ค ์์ง ๋์๊ฒ Vim
์ input์ ํค๋ณด๋๋ก๋ง ๋ฐ๋ ๋ฌด์ํ ๋ฉ๋ชจ์ฅ์ผ ๋ฟ์ด๋ค.
์ข ๋ ์นํด์ ธ๋ณด๋๋ก ๋
ธ๋ ฅํด๋ณด์.
์ ์ฐ๋๊ฑฐ์ผ ๊ทผ๋ฐ..
์ฌ๊ธฐ example-data.xml์ด ์๋ค.
<people>
<person>
<name>Johnny Zhang Jr.</name>
<email>amyalvarez@cole.com</email>
</person>
<person>
<name>Edward Cook</name>
<email>dsparks@alvarez-dunn.com</email>
</person>
<person>
<name>Stephen Sweeney</name>
<email>dlewis@gmail.com</email>
</person>
<person>
<name>Krystal Riley</name>
<email>jflores@wright.biz</email>
</person>
</people>
XML
์ markup language๋ก์ โํ๊ทธโ ๋ด์ ์ธ๋ผ์ธ์ผ๋ก ์ ๋ณด๋ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ์์(element)๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ ์์ ์์์ element๋ people
> person
> {name
,email
} ๋ก ๊ตฌ์ฑ๋์ด ์๋ค๊ณ ๋ณผ ์ ์๋ค.
JSON
์ JavaScript Object Notation์ ์ฝ์๋ก์ ๋ฐ์ดํฐ๋ฅผ ์ข ๋ ์ฝ๊ฒ ๊ตํํ๊ณ ์ ์ฅํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ํ
์คํธ ๊ธฐ๋ฐ์ _โํ์โ_์ ํ๋๋ผ๊ณ ์๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
์ฐธ๊ณ ๋ก, XML
์ EXtensible Markup Language์ ์ฝ์์ด๋ค. (link :: ๋ ์ฌ์ด์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ )
์๋ฌดํผ, ์ฐ๋ฆฌ๋ ์ด ๋๊ฐ์ ๋ณํ์ ํด์ผํ๋ค. ๊ตฌ์กฐ์ ๋ํ ์์ธํ ์ค๋ช ์ 6.Reference ์ ๋งํฌ๋ฅผ ์ฐธ์กฐํ๋๋ก ํ๊ณ , ์ด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด์.
๊ธ์ฐ๋ ๋ณธ์ธ๋ ์ ๋ด์ฉ์ ์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์, ์ฝ๋๋ฅผ ๋ณด๊ณ ํ๋์ฉ ํด์ํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ฉฐ, ์ค๋ช ์ ํ๋๋ก ํด์ผ๊ฒ ๋ค.
<people>
<person>
<name>Johnny Zhang Jr.</name>
<email>amyalvarez@cole.com</email>
</person>
...
</people>
Sed
Regex
๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค. ํ
์คํธ๋ฅผ ๋ถํดํ๊ฑฐ๋ ๋ณํํ๊ธฐ ์ํ ํ๋ก๊ทธ๋จ(Sed
)์ ํน์ ํ ๊ท์น์ ๊ฐ์ง ๋ฌธ์์ด์ ์งํฉ์ ํํํ๋ ๋ฐฉ๋ฒ(Regex
, ์ ๊ทํํ์์ ์ฌ๋ฌ language์์ ์ง์ํ๋ค)์ผ๋ก ์ธํ ๋ด์ฉ์ ๋๋ฌด๋ ๋ง์ ์๋ตํ๋ค. ๐ : g/people/d
: %s/<person>/{/g
: %s/<\/person>/},/g
: %s/<name>\(.*\)<\/name>/"name": "\1",/g
: %s/<email>\(.*\)<\/email>/"email": "\1",/g
: g/people/d
์ปค๋งจ๋๋ ๋ชจ๋ ๋ผ์ธ์ ์ ์ฉํ์ฌ(g) โpeopleโ ์ ์ฐพ๊ณ line delete(d) ํ๋ค.
: %s/<person>/{/g
์ปค๋งจ๋๋ ๋ชจ๋ ๋ผ์ธ์ โ
: %s/<\/person>/},/g
์ ์ปค๋งจ๋์ ๊ฐ๊ณ , ์ญ์ฌ๋์ฌ(โ')๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ฌ๋์ฌ(โ/โ)๋ฅผ ๋ฌธ์๋ก ๋ฐ๊ธฐ ์ํจ์ธ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ๋ก ๋ธ๋ผ์ผ ๊ตฌ๋ถ์ ์ํ delimeter โ,โ๋ ์ถ๊ฐํด์ฃผ์.
: %s/<name>\(.*\)<\/name>/"name":"\1",/g
์ปค๋งจ๋๋ <name>*</name>
์ "name" : "*"
๋ก ๋ณ๊ฒฝํด์ค๋ค. (\1 ์ ์ฒซ๋ฒ์งธ backreference๋ฅผ ์๋ฏธํ๋ค.)
์ด ํ, manually ํ๊ฒ ๋ง์ง๋ง ์ผํ(,)๋ฅผ ์ ๊ฑฐํ๊ณ , ๋๊ดํธ(โ[โ,โ]โ)๋ฅผ ์๋ค๋ก ์ถ๊ฐํ๋ฉด ๋๋๋ค.
[
{
"name": 'Johnny Zhang Jr.',
"email": 'amyalvarez@cole.com'
},
{
"name": 'Edward Cook',
"email": 'dsparks@alvarez-dunn.com'
},
{
"name": 'Stephen Sweeney',
"email": 'dlewis@gmail.com'
},
{
"name": 'Krystal Riley',
"email": 'jflores@wright.biz'
}
]
vim์ ๋ํด ์ดํดํ๋ ๋จ๊ณ์ธ๋ฐ ์ด์งธ regex์ ๋ํด์ ๋ ๊ณต๋ถ๋ฅผ ํ๊ฒ ๋ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ ๋ค. ์ธ์ ๊ฐ ์ฃผ๋ ฅ์ผ๋ก vim์ ์ฐ๊ฒ ๋๋ค๋ฉด ์ค๋ ๋ฐฐ์ด๊ฑธ ๋ค์ ์จ๋จน์ ๋ ์ด ์ค๊ฒ ์งโฆ ์์..๐ค
missing-semester :: Lecture 3. VIM editor
XML์ด ๋ญ์ผ? :: XML ๊ตฌ์กฐ
JSON์ด ๋ญ์ผ? :: JSON
Sed / Regex :: Sed_manual
VIM Basic search and replace :: vim_tip_wiki