【问题标题】:How to use gsub in awk to find and replace ("./") and (".txt") characters within a file如何在 awk 中使用 gsub 查找和替换文件中的 ("./") 和 (".txt") 字符
【发布时间】:2018-10-19 01:41:15
【问题描述】:

我想使用 sub 和 awk 从我的文件中删除字符“./”和“.txt

这是我的输入在文件中的样子

./file_name.txt|1230

我希望输出是

  file_name|1230

到目前为止,这就是我所写的。我将使用这个 gsub 的输出并将其传递给 awk 并打印它。除此之外,我的其余代码都在工作。

gsub ( "[./txt]","" )

【问题讨论】:

  • "./" 不是字符,而是字符串。 ".txt" 同上。 [...] 等括号表达式用于字符。
  • @ Ed Morton -Thanks。我应该使用圆 () 而不是方括号?
  • 查看@JamesBrown 的回答。

标签: regex unix awk gsub


【解决方案1】:

请改用gsub 并记住转义./,例如\.\/

$ echo "./file_name.txt|1230" | awk '{gsub(/\.\/|\.txt/,"")}1'
file_name|1230

【讨论】:

    【解决方案2】:

    既然你说你需要替换一个你可以使用的文件,

    awk '{gsub(/\.txt|\.\//, "")}1'  file_name > tmp && mv tmp file_name
    

    或者您可以使用更简单的gawk

    gawk -i inplace '{gsub(/\.txt|\.\//, "")}1' file_name
    

    This answer 解释了语句末尾的1 的含义。

    【讨论】:

    • downvoter,请解释为什么我被否决了?如果是关于转义./,我已经解决了。
    • 有助于解释1 含义的链接。谢谢你。
    【解决方案3】:

    您提到了awk,而另一个答案已经回答了这个问题,但是您可以使用sed 做到这一点:

    sed 's|\./||g; s|\.txt||g' <<< "./file_name.txt|1230"
    

    【讨论】:

      猜你喜欢
      • 2015-04-05
      • 1970-01-01
      • 2020-07-04
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多