【问题标题】:replace characters after match匹配后替换字符
【发布时间】:2019-07-11 04:24:48
【问题描述】:

我有一个包含命令行的文件,其中一些带有斜杠。我需要大多数字段中的斜杠才能使命令起作用,但不是在一个字段中,特别是在我要输出到文件的最后一列中。我想用连字符替换最后一列中的斜杠。

我已经尝试寻找带有反向引用的 awk 和 sed 建议,但没有遇到可行的方法。

我有一个文件,其行如下:

foo find "https://localhost" "/website/foo" "this/that/the/other" "yes/no/maybe" -u admin -p admin > yes/no/maybe.txt

我想用连字符替换最后一列中的斜杠,如下所示:

foo find "https://localhost" "/website/foo" "this/that/the/other" "yes/no/maybe" -u admin -p admin > yes-no-maybe.txt

不影响我有斜线的其他列。

【问题讨论】:

  • StackOverflow 希望您询问编程问题,即您在编程时遇到的障碍。描述你需要什么并期待一个解决方案并不是这个社区的用途。请展示您尝试过的方法并描述它未能按预期工作的原因。
  • 不描述你遇到的具体问题,这个问题太笼统了。

标签: shell awk sed


【解决方案1】:

内置的NF变量包含了当前记录的字段个数,可以让你对最后一个字段进行操作,而不必知道有多少个字段。这使它变得如此简单:

$ awk '{gsub("/","-",$NF)}1' file
foo find "https://localhost" "/website/foo" "this/that/the/other" "yes/no/maybe" -u admin -p admin > yes-no-maybe.txt

【讨论】:

  • 我同意@Yunnosch,但查询可以像这样更有效地编写:awk 'gsub("/","-",$NF)' file
  • 感谢您添加解释。
  • @yoga,请注意这种查询方式。如果最后一个字段没有任何“/”字符,gsub 将返回 0 并且不会打印该行。 (试试foo find ... > bar.txt这样的行)
  • 很想知道这一点。谢谢贾斯
猜你喜欢
  • 2014-08-01
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
  • 2023-02-16
  • 1970-01-01
  • 2016-08-27
相关资源
最近更新 更多