使用sed忽略字符后使用空格或空格的行

时间:2013-04-18 21:58:39

标签: bash sed

我正在尝试使用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的数量是未知的,一般来说每种类型的分配数量也不清楚。

2 个答案:

答案 0 :(得分:2)

这对于斯齐尼克的回答略有不同:

sed -n '/^name[0-9]\.first=\(.\+\)/ s//\1/p'

第一部分(/^name[0-9]\.first=\(.\+\)/)选择要传递给s///命令的行。 s命令中的空模式重新使用上一个正则表达式,替换部分(\1)将整个匹配替换为第一个带括号的部分的内容。正则表达式。使用-np标志来控制打印的行。

答案 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是捕获的组