1

我正在尝试使用 sed 提取在文本文件中进行的一些分配。我的文本文件看起来像......

color1=blue
color2=orange

name1.first=Ahmed
name2.first=Sam
name3.first=
name4.first=
name5.first=
name6.first=

目前,我正在使用 sed 打印 name#.first 之后的所有字符串 ...

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 的数量是未知的,通常每种类型的分配数量也是未知的。

4

2 回答 2

2

这是对 sputnick 的回答略有不同:

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

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

于 2013-04-19T00:25:51.150 回答
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 是捕获组
于 2013-04-18T22:08:43.897 回答