【问题标题】:Remove substring that occurs multiple times using awk使用 awk 删除多次出现的子字符串
【发布时间】:2015-06-08 08:19:28
【问题描述】:

我需要从我的文本文件中删除所有\t\t 和所有\n。 文本片段。

"\t\t\"password\": \"password\","+
"\t\t\"organization\": {\n"+
"\t\t\t\"name\": \"name\""+
"\t\t},"+
"\t\t\"title\": \"title\","+
"\t\t\"phone\": \"999999\","

谁能帮我过滤掉这段文字?

我之前的解决方案既不优雅也不高效,而且非常冗长。

【问题讨论】:

  • 两种解决方案都可以正常工作,但只是一个想法,可能值得从源头解决这个问题。看起来你有一些东西试图用制表符和换行符“漂亮地打印”一个 JSON 字符串,但转义字符没有被正确识别。
  • 实际上,输入文件是从通过转义库运行的格式化 JSON 生成的。该库将 json 输出为 Java 字符串(拆分为小可读长度的连接行),但它也转义并包含制表符和新行,我根本不需要。

标签: linux string awk


【解决方案1】:

我假设您正在尝试删除文字 \t\n 字符。

$ awk '{gsub(/\\t|\\n/, "")}1' file
"\"password\": \"password\","+
"\"organization\": {"+
"\"name\": \"name\""+
"},"+
"\"title\": \"title\","+
"\"phone\": \"999999\","

【讨论】:

  • 是的,这正是我所需要的。 Tnx
  • 我与sub 函数进行了一场真正的斗争...:/
  • gsub 将进行全局替换,sub 将每行替换一次。
  • 是的,我尝试循环并返回记录...非常混乱且效率低下。 Stackoverflow 的救援。
【解决方案2】:

我会使用sed 进行简单的流编辑,尤其是子字符串的删除或替换:

sed -r 's/(\\t\\t|\\n)//g' input.file

【讨论】:

  • 看起来匹配单个\t 就足够安全了,所以你可以用s/\\[tn]//g 保存几个字符
  • 当然,你是对的! (有如图所示的示例数据)很好! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 2022-10-19
相关资源
最近更新 更多