所以我必须做一个 grep 或 sed ?

所以我必须做一个 grep 或 sed ?

刚刚有一个关于 的问题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 的标记。

相关内容