我正在尝试使用sed来提取在文本文件中进行的一些分配。我的文本文件看起来像......
color1=blue
color2=orange
name1.first=Ahmed
name2.first=Sam
name3.first=
name4.first=
name5.first=
name6.first=
目前,我使用sed打印名称#.first's ...
之后的所有字符串sed 's/name.*.first=//' file
但是,当然,这也打印了所有没有作业的行...
Ahmed
Sam
# I'm just putting this comment here to illustrate the extra carriage returns above; please ignore it
有什么方法可以让sed忽略只有空白或空格分配的行并将其存储到数组中?分配的名称#.first的数量是未知的,一般来说每种类型的分配数量也不清楚。
答案 0 :(得分:2)
这对于斯齐尼克的回答略有不同:
sed -n '/^name[0-9]\.first=\(.\+\)/ s//\1/p'
第一部分(/^name[0-9]\.first=\(.\+\)/
)选择要传递给s///
命令的行。 s
命令中的空模式重新使用上一个正则表达式,替换部分(\1
)将整个匹配替换为第一个带括号的部分的内容。正则表达式。使用-n
和p
标志来控制打印的行。
答案 1 :(得分:1)
sed -n 's/^name[0-9]\.\w\+=\(\w\+\)/\1/p' file
Ahmed
Sam
-n
开关禁止sed
的默认行为:打印所有行s///
是替换的骨架^
匹配行的开头name
文字字符串[0-9]
一个数字\.\w\+
一个文字点(没有反斜杠表示任何字符)后跟一个单词字符[a-zA-Z0-9_]至少一个:\+
( )
是一个捕获组,\ 1是捕获的组