{"id":685,"date":"2026-02-20T20:47:53","date_gmt":"2026-02-20T11:47:53","guid":{"rendered":"https:\/\/tech.softbell.net\/?p=685"},"modified":"2026-03-22T00:37:56","modified_gmt":"2026-03-21T15:37:56","slug":"grep%ec%9d%b4-%eb%86%93%ec%b9%9c-%eb%a9%80%ed%8b%b0%eb%9d%bc%ec%9d%b8-%eb%a0%88%ec%bd%94%eb%93%9c-awk-paragraph-mode%eb%a1%9c-%ed%95%b4%ea%b2%b0%ed%95%9c-%ed%8c%8c%ec%9d%b4%ed%94%84%eb%9d%bc","status":"publish","type":"post","link":"https:\/\/tech.softbell.net\/?p=685","title":{"rendered":"grep\uc774 \ub193\uce5c \uba40\ud2f0\ub77c\uc778 \ub808\ucf54\ub4dc \u2014 awk paragraph mode\ub85c \ud574\uacb0\ud55c \ud30c\uc774\ud504\ub77c\uc778 \ubc84\uadf8"},"content":{"rendered":"<h2>\ud83d\udccc \ud575\uc2ec \uc694\uc57d<\/h2>\n<p>\uc790\ub3d9\ud654 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c <code>grep<\/code>\uc73c\ub85c \uba40\ud2f0\ub77c\uc778 \ub808\ucf54\ub4dc\ub97c \ud544\ud130\ub9c1\ud558\uba74 \ub9e4\uce6d\ub41c \uc904\ub9cc \ucd94\ucd9c\ub418\uc5b4 \ub098\uba38\uc9c0 \ud544\ub4dc(\uc81c\ubaa9, URL)\uac00 \uc720\uc2e4\ub41c\ub2e4. <code>awk<\/code>\uc758 paragraph mode(<code>RS=\"\"<\/code>)\ub97c \uc0ac\uc6a9\ud558\uba74 \ube48 \uc904\ub85c \uad6c\ubd84\ub41c \ub808\ucf54\ub4dc \ube14\ub85d \uc804\uccb4\ub97c \ud558\ub098\uc758 \ub2e8\uc704\ub85c \ub2e4\ub8f0 \uc218 \uc788\uc5b4 \ubb38\uc81c\uac00 \ud574\uacb0\ub41c\ub2e4.<\/p>\n<hr>\n<h2>\uc99d\uc0c1: \ubb54\uac00 \uc798\ub9ac\uace0 \uc788\ub2e4<\/h2>\n<p>\uc790\ub3d9\ud654 \ud30c\uc774\ud504\ub77c\uc778\uc774 \ub3cc\uc544\uac00\uace0 \uc788\uc5c8\ub2e4. RSS \ud53c\ub4dc\ub97c \uc218\uc9d1\ud558\uace0, \uad00\uc2ec \uc788\ub294 \ube14\ub85c\uadf8 \ucd9c\ucc98\uc758 \uae30\uc0ac\ub97c \uace8\ub77c\ub0b4\uace0(<code>curate.sh<\/code>), \uacb0\uacfc\ub97c <code>curated.md<\/code>\uc5d0 \uc800\uc7a5\ud558\ub294 \uad6c\uc870\uc600\ub2e4.<\/p>\n<p>\uadf8\ub7f0\ub370 \uc5b4\ub290 \ub0a0\ubd80\ud130 <code>curated.md<\/code>\uac00 \uc774\uc0c1\ud588\ub2e4.<\/p>\n<pre><code>Blog: \ubcf4\uc548\ub274\uc2a4\nBlog: \ubcf4\uc548\ub274\uc2a4\nBlog: \ubcf4\uc548\ub274\uc2a4<\/code><\/pre>\n<p>\uae30\uc0ac \uc81c\ubaa9\ub3c4 \uc5c6\uace0, URL\ub3c4 \uc5c6\ub2e4. \ucd9c\ucc98 \ub77c\ubca8\ub9cc \ub369\uadf8\ub7ec\ub2c8 \ucc0d\ud600 \uc788\uc5c8\ub2e4. \ud30c\uc774\ud504\ub77c\uc778\uc740 \uc5d0\ub7ec \uc5c6\uc774 \uc815\uc0c1 \uc885\ub8cc\ub418\uace0, \uc218\uc9d1 \ub370\uc774\ud130(raw)\ub294 \uc815\uc0c1\uc774\uc5c8\ub2e4. \uc5b4\ub518\uac00\uc5d0\uc11c <strong>\ub370\uc774\ud130\uac00 \uc0ac\ub77c\uc9c0\uace0 \uc788\uc5c8\ub2e4<\/strong>.<\/p>\n<h2>\ud30c\uc774\ud504\ub77c\uc778 \uad6c\uc870 \ud30c\uc545<\/h2>\n<p><code>collect.sh<\/code>\uac00 \uac01 RSS \ud56d\ubaa9\uc744 \uc544\ub798 \ud615\uc2dd\uc73c\ub85c \uc800\uc7a5\ud55c\ub2e4.<\/p>\n<pre><code>Title: TP-Link, \ubbf8\uad6d \ud14d\uc0ac\uc2a4\uc8fc \uc18c\uc1a1 \ub2f9\ud574\nURL: https:\/\/...\nDate: 2026-02-19\nBlog: \ubcf4\uc548\ub274\uc2a4\n\nTitle: Microsoft Copilot, \uae30\ubc00 \uc774\uba54\uc77c \uc811\uadfc \uc624\ub958\nURL: https:\/\/...\nDate: 2026-02-19\nBlog: \ubcf4\uc548\ub274\uc2a4<\/code><\/pre>\n<p><strong>\ube48 \uc904\ub85c \ub808\ucf54\ub4dc\ub97c \uad6c\ubd84\ud558\ub294 \uba40\ud2f0\ub77c\uc778 \ud615\uc2dd<\/strong>\uc774\ub2e4.<\/p>\n<p><code>curate.sh<\/code>\ub294 \uc5ec\uae30\uc11c \uad00\uc2ec \ucd9c\ucc98(<code>\ubcf4\uc548\ub274\uc2a4<\/code>, <code>GeekNews<\/code> \ub4f1)\uc758 \uae30\uc0ac\ub9cc \uace8\ub77c\ub0b8\ub2e4.<\/p>\n<h2>\uc6d0\uc778: grep\uc740 \ub77c\uc778\uc744 \ubcf8\ub2e4, \ub808\ucf54\ub4dc\ub97c \ubaa8\ub978\ub2e4<\/h2>\n<p>\ubb38\uc81c\uac00 \ub41c \ucf54\ub4dc:<\/p>\n<pre><code class=\"language-bash\">pat=\"\ubcf4\uc548\ub274\uc2a4|GeekNews|The New Stack\"\ngrep -E \"Blog:.*($pat)\" collected.txt &gt;&gt; curated.md<\/code><\/pre>\n<p><code>grep<\/code>\uc740 <strong>\ub77c\uc778(line) \ub2e8\uc704<\/strong>\ub85c \ub3d9\uc791\ud55c\ub2e4. <code>Blog: \ubcf4\uc548\ub274\uc2a4<\/code>\uac00 \uc788\ub294 \uc904\uc5d0 \ub9e4\uce6d\ub418\uba74 \uadf8 \uc904 \ud558\ub098\ub9cc \ucd94\ucd9c\ud55c\ub2e4. \uc704\uc544\ub798 \uc904(<code>Title:<\/code>, <code>URL:<\/code>)\uc740 \uadf8\ub0e5 \ud758\ub7ec\uac04\ub2e4.<\/p>\n<p>\ud30c\uc77c \ud06c\uae30\ub85c \ubcf4\uba74 \uba85\ud655\ud588\ub2e4:<\/p>\n<ul>\n<li>\uc218\uc815 \uc804 <code>curated.md<\/code>: <strong>114 bytes<\/strong> \u2014 <code>Blog:<\/code> \ub77c\ubca8 3\uac1c\ubfd0<\/li>\n<li>\uc218\uc815 \ud6c4 <code>curated.md<\/code>: <strong>321 bytes<\/strong> \u2014 \uc81c\ubaa9 + URL \ud3ec\ud568<\/li>\n<\/ul>\n<p><code>grep<\/code>\uc774 \ub098\uc05c \uac8c \uc544\ub2c8\ub2e4. \ub77c\uc778 \ub2e8\uc704 \ub3c4\uad6c\uc778\ub370 \ub808\ucf54\ub4dc \ub2e8\uc704 \uc791\uc5c5\uc5d0 \uc4f4 \uac83\uc774 \ubb38\uc81c\uc600\ub2e4.<\/p>\n<h2>\ud574\uacb0: awk paragraph mode<\/h2>\n<p><code>awk<\/code>\uc5d0\ub294 <strong>paragraph mode<\/strong>\uac00 \uc788\ub2e4. <code>RS=\"\"<\/code>(Record Separator\ub97c \ube48 \ubb38\uc790\uc5f4\ub85c \uc124\uc815)\ub85c \ud65c\uc131\ud654\ud558\uba74, \ube48 \uc904\ub85c \uad6c\ubd84\ub41c \ube14\ub85d \uc804\uccb4\ub97c \ud558\ub098\uc758 \ub808\ucf54\ub4dc\ub85c \ub2e4\ub8ec\ub2e4.<\/p>\n<pre><code class=\"language-bash\">pat=\"\ubcf4\uc548\ub274\uc2a4|GeekNews|The New Stack\"\n\nawk -v pat=\"$pat\" '\n  BEGIN { RS=\"\"; ORS=\"\\n\\n\" }\n  $0 ~ \"Blog:.*(\" pat \")\"\n' collected.txt &gt;&gt; curated.md<\/code><\/pre>\n<ul>\n<li><code>RS=\"\"<\/code> \u2192 \ube48 \uc904 = \ub808\ucf54\ub4dc \uad6c\ubd84\uc790 (paragraph mode)<\/li>\n<li><code>ORS=\"\\n\\n\"<\/code> \u2192 \ucd9c\ub825 \uc2dc \ub808\ucf54\ub4dc \uc0ac\uc774\uc5d0 \ube48 \uc904 \uc720\uc9c0<\/li>\n<li><code>$0 ~ \"\ud328\ud134\"<\/code> \u2192 \ub808\ucf54\ub4dc \uc804\uccb4(<code>$0<\/code>)\uc5d0\uc11c \ud328\ud134 \uac80\uc0c9 \u2192 \ub9e4\uce6d\ub418\uba74 \ub808\ucf54\ub4dc \uc804\uccb4 \ucd9c\ub825<\/li>\n<\/ul>\n<p><code>Blog: \ubcf4\uc548\ub274\uc2a4<\/code>\uac00 \ud3ec\ud568\ub41c \ube14\ub85d \uc804\uccb4(<code>Title:<\/code>, <code>URL:<\/code>, <code>Date:<\/code> \ud3ec\ud568)\uac00 \uc815\uc0c1 \ucd94\ucd9c\ub41c\ub2e4.<\/p>\n<h2>\uac80\uc99d<\/h2>\n<p>\ud30c\uc774\ud504\ub77c\uc778 \ub2e4\uc74c \uc2e4\ud589 \ud6c4:<\/p>\n<pre><code>$ wc -c curated.md\n321 curated.md\n\n$ cat curated.md\nTitle: TP-Link, \ubbf8\uad6d \ud14d\uc0ac\uc2a4\uc8fc \uc18c\uc1a1 \ub2f9\ud574\nURL: https:\/\/...\nDate: 2026-02-19\nBlog: \ubcf4\uc548\ub274\uc2a4\n\nTitle: Microsoft Copilot, \uae30\ubc00 \uc774\uba54\uc77c \uc811\uadfc \uc624\ub958\nURL: https:\/\/...\nDate: 2026-02-19\nBlog: \ubcf4\uc548\ub274\uc2a4<\/code><\/pre>\n<p>\uc81c\ubaa9\uacfc URL\uc774 \uc628\uc804\ud788 \ud3ec\ud568\ub418\uc5b4 \uc788\ub2e4.<\/p>\n<h2>\uc815\ub9ac: grep vs awk, \uc5b8\uc81c \ubb58 \uc4f8\uae4c<\/h2>\n<table>\n<thead>\n<tr>\n<th>\uc0c1\ud669<\/th>\n<th>\ub3c4\uad6c<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\ud2b9\uc815 \ud328\ud134\uc774 \ud3ec\ud568\ub41c \uc904 \ucd94\ucd9c<\/td>\n<td><code>grep<\/code><\/td>\n<\/tr>\n<tr>\n<td>\ud328\ud134\uc774 \ud3ec\ud568\ub41c <strong>\ub808\ucf54\ub4dc(\ube14\ub85d) \uc804\uccb4<\/strong> \ucd94\ucd9c<\/td>\n<td><code>awk<\/code> (paragraph mode)<\/td>\n<\/tr>\n<tr>\n<td>CSV, TSV \ub4f1 \ud544\ub4dc \uae30\ubc18 \ucc98\ub9ac<\/td>\n<td><code>awk<\/code><\/td>\n<\/tr>\n<tr>\n<td>\ubcf5\uc7a1\ud55c \uc870\uac74\u00b7\ubcc0\uc218\u00b7\uc9d1\uacc4<\/td>\n<td><code>awk<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><code>grep<\/code>\uc740 \ube60\ub974\uace0 \uc9c1\uad00\uc801\uc774\uc9c0\ub9cc &quot;\ud55c \uc904&quot;\uc744 \uae30\ubcf8 \ub2e8\uc704\ub85c \ubcf8\ub2e4. \uba40\ud2f0\ub77c\uc778 \ub808\ucf54\ub4dc\uac00 \uc11e\uc778 \ud14d\uc2a4\ud2b8\ub97c \ub2e4\ub8f0 \ub54c\ub294 \ucc98\uc74c\ubd80\ud130 <code>awk<\/code>\ub97c \uc4f0\ub294 \uac8c \ub0ab\ub2e4.<\/p>\n<h2>\ub9c8\uce58\uba70<\/h2>\n<p>\uc178 \uc2a4\ud06c\ub9bd\ud2b8\uc5d0\uc11c \ub370\uc774\ud130\uac00 &quot;\uc0ac\ub77c\uc9c0\ub294&quot; \ubc84\uadf8\ub294 \ub300\ubd80\ubd84 \ub3c4\uad6c\uc758 \ucc98\ub9ac \ub2e8\uc704\uc640 \ub370\uc774\ud130\uc758 \ub17c\ub9ac \ub2e8\uc704\uac00 \ubd88\uc77c\uce58\ud560 \ub54c \ubc1c\uc0dd\ud55c\ub2e4. <code>grep<\/code>\uc740 \ub77c\uc778\uc744 \ubcf4\uace0, <code>awk<\/code>\ub294 \ub808\ucf54\ub4dc\ub97c \ubcf8\ub2e4. \ub3c4\uad6c\ub97c \uace0\ub97c \ub54c &quot;\ub0b4 \ub370\uc774\ud130\uc758 \ub2e8\uc704\uac00 \ubb34\uc5c7\uc778\uac00&quot;\ub97c \uba3c\uc800 \uc0dd\uac01\ud558\uba74 \uc774\ub7f0 \ud568\uc815\uc744 \ud53c\ud560 \uc218 \uc788\ub2e4.<\/p>\n<h2>\ucc38\uace0 \uc790\ub8cc<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.gnu.org\/software\/gawk\/manual\/html_node\/Multiple-Line.html\">GNU awk \uacf5\uc2dd \ubb38\uc11c: Multiple-Line Records<\/a><\/li>\n<li><a href=\"https:\/\/pubs.opengroup.org\/onlinepubs\/9699919799\/utilities\/awk.html\">POSIX awk \uc2a4\ud399<\/a><\/li>\n<li><a href=\"https:\/\/learnbyexample.github.io\/tips\/cli-tip-9\/\">CLI tip 9: awk paragraph mode (learnbyexample)<\/a><\/li>\n<\/ul>\n<p>\uc870\ud68c\uc218: 27<\/p>","protected":false},"excerpt":{"rendered":"<p>\ud83d\udccc \ud575\uc2ec \uc694\uc57d \uc790\ub3d9\ud654 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c grep\uc73c\ub85c \uba40\ud2f0\ub77c\uc778 \ub808\ucf54\ub4dc\ub97c \ud544\ud130\ub9c1\ud558\uba74 \ub9e4\uce6d\ub41c \uc904\ub9cc \ucd94\ucd9c\ub418\uc5b4 \ub098\uba38\uc9c0 \ud544\ub4dc(\uc81c\ubaa9, URL)\uac00 \uc720\uc2e4\ub41c\ub2e4. awk\uc758 paragraph mode(RS=&#8221;&#8221;)\ub97c \uc0ac\uc6a9\ud558\uba74 \ube48 \uc904\ub85c \uad6c\ubd84\ub41c \ub808\ucf54\ub4dc \ube14\ub85d \uc804\uccb4\ub97c \ud558\ub098\uc758 \ub2e8\uc704\ub85c \ub2e4\ub8f0 \uc218 \uc788\uc5b4 \ubb38\uc81c\uac00 \ud574\uacb0\ub41c\ub2e4. \uc99d\uc0c1: \ubb54\uac00 \uc798\ub9ac\uace0 \uc788\ub2e4 \uc790\ub3d9\ud654 \ud30c\uc774\ud504\ub77c\uc778\uc774 \ub3cc\uc544\uac00\uace0 \uc788\uc5c8\ub2e4. RSS \ud53c\ub4dc\ub97c \uc218\uc9d1\ud558\uace0, \uad00\uc2ec \uc788\ub294 \ube14\ub85c\uadf8 \ucd9c\ucc98\uc758 \uae30\uc0ac\ub97c \uace8\ub77c\ub0b4\uace0(curate.sh), \uacb0\uacfc\ub97c curated.md\uc5d0 \uc800\uc7a5\ud558\ub294 \uad6c\uc870\uc600\ub2e4. \uadf8\ub7f0\ub370 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-685","post","type-post","status-publish","format-standard","hentry","category-linux"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/tech.softbell.net\/index.php?rest_route=\/wp\/v2\/posts\/685","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tech.softbell.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tech.softbell.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tech.softbell.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tech.softbell.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=685"}],"version-history":[{"count":2,"href":"https:\/\/tech.softbell.net\/index.php?rest_route=\/wp\/v2\/posts\/685\/revisions"}],"predecessor-version":[{"id":691,"href":"https:\/\/tech.softbell.net\/index.php?rest_route=\/wp\/v2\/posts\/685\/revisions\/691"}],"wp:attachment":[{"href":"https:\/\/tech.softbell.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=685"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tech.softbell.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=685"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tech.softbell.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=685"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}