刚刚有一个关于 的问题grep
。我有一个包含很多条目的文本文件,我只想打印出特定的数字。这是我的文字,我想要700
打印出来......
Dato: 22-02-2018
Mødt ind: 700
Gået hjem: 1600
Overtid:
答案1
由于该文件具有简单的结构和易于区分的记录,并且您想要其中之一的值,因此可能最容易使用awk
:
awk '/^Mødt ind:/ { print $NF }' file
这/^Mødt ind:/
意味着以下块将为以 text 开头的每一行触发Mødt ind:
。该块打印$NF
,这是该行最后一个字段的值(NF
是最后一个字段的字段号,放在$
它前面就是该字段的值)。
与标准sed
:
sed -n 's/^Mødt ind: \(.*\)/\1/p' file
这与 进行相同的行匹配awk
,但将该行的内容替换为冒号和空格后面的内容。正常输出被禁用,-n
并且仅输出被表达式修改的行。
我仍然会寻求awk
解决方案,因为它更具可读性并且更容易理解/修改。
答案2
sed
正如您已经猜到的那样,单独可以处理这个问题:
sed 's/.*ind:\ \(.*\)/\1/;tx;d;:x'
这是一个搜索和替换操作:
.*ind:\ \(.*\)
搜索以任何字符开头,后跟ind:
(空格被转义)的行。用于\(.*\)
“匹配”该行的其余部分并存储在第一个匹配中,整行被替换为:\1
。工作;tx;d;:x
原理如下:tx
如果替换成功,则分支到标签 x,d
删除行,:x
是标签 x 的标记。