Sed

使用 sed 或 awk 相當於什麼“grep | cut”?

  • December 19, 2018

假設我有一個配置文件/etc/emails.conf

email1 = user@dinkum.dorg 
email2 = user@winkum.worg
email3 = user@stinkum.storg

我想收到電子郵件2

我可以做一個:

grep email2 /etc/emails.conf | cut -d'=' -f2 

獲取 email2,但是我如何使用一個 sed 或 awk 命令“更酷”並刪除 cut 命令會留下的空格?

用awk怎麼樣?

awk -F = '/email2/ { print $2}' /etc/emails.conf
  • -F =欄位由“=”分隔
  • '/email2/ { print $2}'在匹配“email2”的行上,列印第二個欄位

確切的等價物類似於:

sed -n '/email2/{s/^[^=]*=\([^=]*\).*/\1/;p;}' < file

但你可能想要:

sed -n 's/^[^=]*email2[^=]*=[[:blank:]]*//p' < file

(即僅匹配email2第一個之前的部分,=並返回第一個右側的所有內容=(跳過前導空格),而不僅僅是直到第二個的部分(=如果有)。

引用自:https://unix.stackexchange.com/questions/200337