使用 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"
我想知道如何使用awk
或sed
删除不需要的字符。
【问题讨论】:
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
可以比sed
或awk
更简洁地删除字符,尤其是当您想从字符串中删除多个不同的字符时。
删除双引号:
echo '"Hi"' | tr -d \"
# Prints Hi without quotes
删除不同类型的括号:
echo '[Hi]' | tr -d []
# Prints Hi without brackets
-d
代表“删除”。
【讨论】:
以上是关于使用 awk 或 sed 删除特定字符的主要内容,如果未能解决你的问题,请参考以下文章