Shell 脚本:如何从文件的每一行中选取表达式的值
我是 shell 脚本新手。
我有一个包含以下形式的一些记录的文件:
“text1:text2 = value2,text3 = value3,text4 = value4,text5 = value5”text1:text6:value6” “文本1:文本2 =值2,文本3 =值3,文本4 =值4,文本5 =值5”文本1:文本6:值6” “文本1:文本2 =值2,文本3 =值3,文本4 =值4,文本5 =值5”文本1:文本6:值6” "text1:text2=value2,text3=value3,text4=value4,text5=value5"text1:text6:value6"
现在我想编写一个 shell 脚本来获取某些文本的值字段。 例如: 我想要 value2 和 value5 并且我知道它们将存在于 text2= 和 text5= 前面
并且完整的行中没有空格。该文件包含 n 行,我希望每行有 2 个值(即 value2 和 value5),然后存储在变量中以供进一步处理。
有人可以帮忙吗。
谢谢
I am new with shell scripting.
I am having a file containing some records of the form:
"text1:text2=value2,text3=value3,text4=value4,text5=value5"text1:text6:value6"
"text1:text2=value2,text3=value3,text4=value4,text5=value5"text1:text6:value6"
"text1:text2=value2,text3=value3,text4=value4,text5=value5"text1:text6:value6"
"text1:text2=value2,text3=value3,text4=value4,text5=value5"text1:text6:value6"
Now I want to write a shell script that picks up the value field for some text.
Eg:
I want value2 and value5 and I know that they will exist in front of text2= and text5=
Also there is no blank space in complete line. The file contains n lines and I want to have 2 values from each line(ie value2 and value5) and store then in a variables for further processing.
Can someone help.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用
sed
:使用 GNU AWK (
gawk
):要使用没有正则表达式作为字段分隔符的其他 AWK 版本,请使用类似于
的正则表达式sed
命令或使用大量分割:使用
cut
:GNU
cut
可能需要能够使用--output-delimiter< /代码> 选项。它可能很难看,但至少不会每行都被调用四次。
Using
sed
:Using GNU AWK (
gawk
):To use other versions of AWK that don't have regular expressions for field separators, use a regex similar to the
sed
command or use a lot of splitting:Using
cut
:GNU
cut
may be required to be able to use the--output-delimiter
option. It may be ugly but at least it's not being called four times on every line.我确信一些更优雅的解决方案是可能的,但这个 bash 脚本只是循环输入并过滤掉
=
和后面的、
和< p>第四个=
和后面的"
之间的值:您可以像这样调用脚本:
I'm sure that some more elegant solution is possible, but this bash script just loops through the input and filters out
=
and the following,
andthe value between the fourth
=
and the following"
:You call the script like this:
从命令行中使用 q.text 中的文本:
gawk -F\" '{print $2}' < q.txt | gawk -F: '{print $2 }' | gawk -F, '{print $1 "=" $4}'| gawk -F= '{print $2 "," $4}'
在 Cygwin bash 上尝试过,它会起作用。我不是程序员,但我使用 cygwin shell,并且认为尝试使用 gawk 执行此操作会很有趣。 。
From the Command Line with text in q.text:
gawk -F\" '{print $2}' < q.txt | gawk -F: '{print $2 }' | gawk -F, '{print $1 "=" $4}'| gawk -F= '{print $2 "," $4}'
Tried on Cygwin bash and it will work. I am not a programmer but I use the cygwin shell and thought it would be fun to try doing this with gawk.