Regex 如何使用;sed";得到字符串的一部分? 背景

Regex 如何使用;sed";得到字符串的一部分? 背景,regex,sed,Regex,Sed,我有一个文件,其中包含有关我的应用程序的信息。我需要使用sed实用程序从该文件中获取应用程序的名称 客观的 我有一个包含以下行的文件: app: :my_super_app, version: "1.4.2", 使用grep和cat我成功地做到了这一点: cat my_file | grep app: | sed -e 's/.*app: "\(:\)",/\1/' 哪些(错误)返回: 应用程序::我的超级应用程序 我希望它能准确地返回字符串my\u super\u app 问题 我的sed

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

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

app: :my_super_app,
version: "1.4.2",
使用
grep
cat
我成功地做到了这一点:

cat my_file | grep app: | sed -e 's/.*app: "\(:\)",/\1/'
哪些(错误)返回:

应用程序::我的超级应用程序

我希望它能准确地返回字符串
my\u super\u app

问题 我的
sed
命令实际上什么也没做。现在我可以删除它,命令也一样

我做错了什么

我所做的研究: 我检查了一些类似的问题:


但是没有用…

您的sed命令没有任何作用,因为它不匹配。例如,字符串中没有引号

试着这样做:

sed -e 's/.*app: :\(.*\),/\1/'

适用于我:)

您的sed命令不起任何作用,因为它不匹配。例如,字符串中没有引号

试着这样做:

sed -e 's/.*app: :\(.*\),/\1/'

适用于我:)

请您尝试一下以下内容

sed -n '/^app:/s/\(.*:\)\([^,]*\),/\2/p'  Input_file
输出如下

my_super_app
编辑:如果您对
awk
没有问题,请尝试以下操作

awk -F'[:,]' '/^app:/{print $3}'  Input_file

注:您的
sed
命令的改进将是:无需使用
cat
grep
,因为
sed
可以自己读取输入文件。

请尝试以下操作一次

sed -n '/^app:/s/\(.*:\)\([^,]*\),/\2/p'  Input_file
输出如下

my_super_app
编辑:如果您对
awk
没有问题,请尝试以下操作

awk -F'[:,]' '/^app:/{print $3}'  Input_file

注:您的
sed
命令的改进是:无需使用
cat
grep
,因为
sed
可以自己读取输入文件。

只打印应用程序名

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

仅打印应用程序名称的步骤

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

@Flame_Phoenix,它对我来说工作得非常好,请您通过执行
cat-v输入_文件
检查您的文件中是否有任何控制M字符,并让我知道?执行
cat-v我的_文件
打印整个文件。未显示任何其他信息。@Flame\u Phoenix,不确定此代码是否适用于我,现在让我为其编写另一个备选方案。@Flame\u Phoenix,如果您对
awk
满意,请立即尝试我的编辑解决方案并通知我。您的awk命令的输入与sed命令相同。没有打印任何内容。尽管如此,我还是要投你的一票,感谢你的努力@Flame_Phoenix,它对我来说工作得非常好,请您通过执行
cat-v输入_文件
检查您的文件中是否有任何控制M字符,并让我知道?执行
cat-v我的_文件
打印整个文件。未显示任何其他信息。@Flame\u Phoenix,不确定此代码是否适用于我,现在让我为其编写另一个备选方案。@Flame\u Phoenix,如果您对
awk
满意,请立即尝试我的编辑解决方案并通知我。您的awk命令的输入与sed命令相同。没有打印任何内容。尽管如此,我还是要投你的一票,感谢你的努力!您需要使用
sed-n
并添加
/p
仅打印匹配行。您需要使用
sed-n
并添加
/p
仅打印匹配行。