Linux grep文件以读取key:value
我有一个文件Linux grep文件以读取key:value,linux,shell,sh,Linux,Shell,Sh,我有一个文件file.txt,它有各种key:value对。从文件中读取特定的值时,会打印多行。请帮我纠正下面的逻辑 输入_文件 cat file.txt NAMES:1234-A0;5678-B0;3456-C0 1234-A0:1234_12345678_987 所需的_输出 1234\u 12345678\u 987 我的密码 cat file.txt NAMES:1234-A0;5678-B0;3456-C0 1234-A0:1234_12345678_987 cat file.
file.txt
,它有各种key:value
对。从文件中读取特定的值时,会打印多行。请帮我纠正下面的逻辑
输入_文件
cat file.txt
NAMES:1234-A0;5678-B0;3456-C0
1234-A0:1234_12345678_987
所需的_输出
1234\u 12345678\u 987
我的密码
cat file.txt
NAMES:1234-A0;5678-B0;3456-C0
1234-A0:1234_12345678_987
cat file.txt | grep-w 1234-A0 | cut-f2-d':'
输出
1234-A0;5678-B0;3456-C0
1234_12345678_987
请让我知道上面的命令(?)有什么错误,以及获得所需输出的正确命令应该是什么。谢谢 awk
是实现这一点的合适工具,因为您的数据由公共字符分隔,并以列和行的形式进行结构化。您可以使用此awk命令:
awk -F: '$1 == "1234-A0"{print $2}' file
首先,
请让我知道上面的命令有什么问题
编写cat file.txt时| grep-w 1234-A0
它应该是grep-w 1234-A0 file.txt
(我的意思是,从cat
导入可以直接读取文件的命令是没有用的,
另外,您正在吃掉一些宝贵的资源,同时使您的脚本处于次优状态)
也就是说,您要求使用单词“1234-A0”的行…这正是您的输出!
现在尝试以下操作并记下差异:
grep:1234-A0'file.txt
(应该有第一行)
grep'1234-A0:'file.txt
(您应该有第二个)
grep'^1234-A0'file.txt
(第二行)
添加更多行,在文件的其他地方随机添加“1234-A0”,然后重新运行上面的示例
看看有什么不同
最后,
正确的命令应该是什么
一旦给出正确的图案,现在就可以像以前那样进行管道切割:
grep'^1234-A0:'file.txt | cut-f2-d:
例如
AWK语言是另一种方式,更简洁,但现在不是你现在的样子
仍在学习BRE(也可以在sed
和vi
中找到,而awk
使用ERE)感谢@gildux的详细解释。这真的帮助了我。