您好我有一个包含以下内容的文件:
7 Y-N2
8 Y-H
9 Y-O2
我希望将它与以下sed命令匹配,并在行的开头获取数字:
abc=$(sed -n -E "s/([0-9]*)(^[a-zA-Z])($j)/\1/g" file)
$j
是一个变量,完全包含Y-O2
或Y-H
。
数字不是亚麻布。
号码后面跟着一封信。
在数字是空格之前。
回显$abc
会返回一条白线。
由于
答案 0 :(得分:2)
这里有很多问题:
^
必须在里面在char类中制作否定字母-n
选项,因此您必须使用p
命令,否则将无法打印任何内容(此处g
选项无效)工作命令(我已-E
更改了-n
,因为我的sed
版本不支持它,两者都应该有效):
sed -nr "s/ *([0-9]+) +([^a-zA-Z])($j)/\1/p" file
注意:awk
似乎更适合这项工作。例如:
awk -v j=$j '$2 == j { print $1 }' file
答案 1 :(得分:2)
Sed对于这项任务似乎过于复杂,但是使用awk你可以写:
awk -vk="$var" '$2==k{print $1}' file
使用-vk="$var"
我们将awk
变量k
设置为$var
shell变量的值。
然后,我们使用'filter{command}'
语法,其中过滤器$2==k
是第二个字段等于变量k
。如果匹配,我们会使用{print $1}
打印第一个字段。
答案 2 :(得分:1)
试试这个:
abc=$(sed -n "s/^ *\([0-9]*\) *Y-[OH]2*.*/\1/p" file)
<强>说明:强>
^ *
:以任意数量的空格开头的行\([0-9]*\)
:使用反向引用捕获以下号码*
:在任意数量的空格之后Y-[OH]2*
:搜索Y-
字符串后跟N
或H
,并选择2
\1/p
:使用\1
命令p