小编use*_*850的帖子

gawk中gensub()的解释

我有一个要求,我必须删除,文件中倒数第二行的内容,如下所示

\n
   '/tols/tope/triy8/ffgy/890/oki4/2egt.dbf',\n   '/tols/tope/triy8/ffgy/890/oki4/sddd.dbf',\n   '/tols/tope/triy8/ffgy/890/oki4/dfcf.dbf',\n   '/tols/tope/triy8/ffgy/890/oki4/rttemp.dbf',\n   '/tols/tope/triy8/ffgy/890/oki4/oxiule.dbf',\n   '/tols/tope/triy8/ffgy/890/oki4/sdafrtt.dbf',\n CHARACTER SET AL32UTF8\n ;\n
Run Code Online (Sandbox Code Playgroud)\n

我使用来自该论坛的 gawk 命令实现了它,如下所示:

\n

-bash-3.2$ gawk -v RS='\\0' -v ORS= '{print gensub(/,([^,]+)$/, "\\\\1", "")}' tstop1

\n

[编辑]:原始问题显示"\\1"是由格式不正确引起的,但它实际上意味着"\\\\1"

\n

获得的输出作为所需的输出:

\n
  '/tols/tope/triy8/ffgy/890/oki4/2egt.dbf',\n   '/tols/tope/triy8/ffgy/890/oki4/sddd.dbf',\n   '/tols/tope/triy8/ffgy/890/oki4/dfcf.dbf',\n   '/tols/tope/triy8/ffgy/890/oki4/rttemp.dbf',\n   '/tols/tope/triy8/ffgy/890/oki4/oxiule.dbf',\n   '/tols/tope/triy8/ffgy/890/oki4/sdafrtt.dbf'\n CHARACTER SET AL32UTF8\n ;\n
Run Code Online (Sandbox Code Playgroud)\n

但我不理解该命令,尤其是这部分gensub(/,([^,]+)$/, "\\\\1", "")...\n我从手册中得到以下内容gensub

\n
\n

gensub(r, s, h [, t]) 在目标字符串中搜索t正则表达式的\n匹​​配项r。如果是一个以or\nh开头的字符串,则将 的所有匹配项替换为。否则,\n是一个数字,指示要替换的匹配项 。如果未提供,则使用 来代替。在替换文本中,\n序列(其中是从 1 到 9 的数字)可用于\n表示仅与 \xe2\x80\x99th 带括号的子表达式匹配的文本。该序列代表整个匹配的文本,\nas …

awk

1
推荐指数
1
解决办法
2755
查看次数

标签 统计

awk ×1