【问题标题】:Remove a specific character using awk or sed使用 awk 或 sed 删除特定字符
【发布时间】:2011-12-21 22:53:12
【问题描述】:

我有一个命令输出,我想从中删除双引号 "

命令:

strings -a libAddressDoctor5.so |\
grep EngineVersion |\
awk '{if(NR==2)print}' |\
awk '{print$2}'

输出:

EngineVersion="5.2.5.624"

我想知道如何使用awksed 删除不需要的字符。

【问题讨论】:

  • sed 's/"//g' - 删除所有"
  • @Banthar:谢谢,s 在这里是什么意思?
  • s 的意思是“替代品”。从左到右阅读's/"//g',它说用任何东西替换“,并且对输入中的每个”都这样做。

标签: linux awk sed replace


【解决方案1】:

使用 sed 的替换:sed 's/"//g'

s/X/Y/ 将 X 替换为 Y。

g 表示应替换所有出现的位置,而不仅仅是第一个。

【讨论】:

    【解决方案2】:

    只使用 awk 你可以做到(我还缩短了你的一些管道):

    strings -a libAddressDoctor5.so | awk '/EngineVersion/ { if(NR==2) { gsub("\"",""); print $2 } }'
    

    我无法为您验证,因为我不知道您的确切输入,但以下方法有效:

    echo "Blah EngineVersion=\"123\"" | awk '/EngineVersion/ { gsub("\"",""); print $2 }'
    

    另请参阅this question 删除单引号。

    【讨论】:

    • Awk 的 gsub 函数是我需要直接从 awk 脚本而不是命令行中删除字符的功能,谢谢。
    【解决方案3】:

    tr 可以比sedawk 更简洁地删除字符,尤其是当您想从字符串中删除多个不同的字符时。

    删除双引号:

    echo '"Hi"' | tr -d \"
    # Prints Hi without quotes
    

    删除不同类型的括号:

    echo '[{Hi}]' | tr -d {}[]
    # Prints Hi without brackets
    

    -d 代表“删除”。

    【讨论】:

      猜你喜欢
      • 2018-09-22
      • 1970-01-01
      • 2019-10-20
      • 2013-02-27
      • 1970-01-01
      • 2018-04-11
      • 2016-09-05
      • 2013-10-08
      • 1970-01-01
      相关资源
      最近更新 更多