如何使用“ sed”获取字符串的一部分?

时间:2018-12-14 12:00:46

标签: regex sed

背景

我有一个包含有关我的应用程序信息的文件。我需要使用sed实用工具从该文件中获取应用的名称。

客观

我有一个包含以下几行的文件:

app: :my_super_app,
version: "1.4.2",

我使用grepcat做到了这一点:

cat my_file | grep app: | sed -e 's/.*app: "\(:\)",/\1/'

(错误地)返回:

app: :my_super_app

我希望它精确返回字符串my_super_app

问题

我的sed命令实际上什么也没做。现在我可以将其删除,命令将是相同的。

我在做什么错了?

我所做的研究:

我已经检查了一些类似的问题:

但无济于事...

3 个答案:

答案 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命令的改进之处在于:无需使用catgrep,因为sed可以自己读取Input_file。

答案 2 :(得分:0)

仅打印应用名称

sed -e '/.*app: :\(.*\),.*/!d' -e 's//\1/' my_file
# or
sed -n 's/.*app: :\(.*\),.*/\1/p' my_file