我有一个包含有关我的应用程序信息的文件。我需要使用sed
实用工具从该文件中获取应用的名称。
我有一个包含以下几行的文件:
app: :my_super_app,
version: "1.4.2",
我使用grep
和cat
做到了这一点:
cat my_file | grep app: | sed -e 's/.*app: "\(:\)",/\1/'
(错误地)返回:
app: :my_super_app
我希望它精确返回字符串my_super_app
我的sed
命令实际上什么也没做。现在我可以将其删除,命令将是相同的。
我在做什么错了?
我已经检查了一些类似的问题:
但无济于事...
答案 0 :(得分:2)
您的sed命令不执行任何操作,因为它不匹配。例如,您的字符串中没有引号。
像这样尝试:
sed -e 's/.*app: :\(.*\),/\1/'
为我工作:)
答案 1 :(得分:1)
请您尝试一次。
sed -n '/^app:/s/\(.*:\)\([^,]*\),/\2/p' Input_file
输出如下。
my_super_app
编辑:如果您对awk
没问题,请尝试执行以下操作。
awk -F'[:,]' '/^app:/{print $3}' Input_file
PS:sed
命令的改进之处在于:无需使用cat
和grep
,因为sed
可以自己读取Input_file。
答案 2 :(得分:0)
仅打印应用名称
sed -e '/.*app: :\(.*\),.*/!d' -e 's//\1/' my_file
# or
sed -n 's/.*app: :\(.*\),.*/\1/p' my_file