使用 awk 或 sed 删除特定字符

Posted

技术标签:

【中文标题】使用 awk 或 sed 删除特定字符【英文标题】:Remove a specific character using awk or 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',它说用任何东西替换“,并且对输入中的每个”都这样做。 【参考方案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 代表“删除”。

【讨论】:

以上是关于使用 awk 或 sed 删除特定字符的主要内容,如果未能解决你的问题,请参考以下文章

使用 BASH 或 awk 或 sed 或其他方式删除文件的前两行

sed 或 awk:删除模式后面的 n 行

sed 删除最后几行 和删除指定行 awk使用

使用 sed 或 awk 在特定行号处插入一行

使用 sed 或 awk 在特定行号处插入一行

shell中 sed或awk 通过分隔符删除相应字段