[英]Can I perform a 'non-global' grep and capture only the first match found for each line of input?
我知道我要問的是可以使用 awk 或 sed 來完成的,我在這里問的是如何使用 GREP 來做到這一點。
給定以下輸入:
.bash_profile .config/ranger/bookmarks .oh-my-zsh/README.md
我想使用 GREP 來獲得:
.bash_profile .config/ .oh-my-zsh/
目前我正在嘗試
grep -Po '([^/]*[/]?){1}'
這導致輸出:
.bash_profile .config/ ranger/ bookmarks .oh-my-zsh/ README.md
是否有一些簡單的方法可以使用 GREP 僅獲取每行上的第一個匹配字符串?
你根本不需要grep
。
cut -d / -f 1
-o
選項表示打印與您的模式匹配的每個子字符串,而不是打印每個匹配的行。 您當前的模式匹配每個不包含斜杠的字符串(可選地包括尾部斜杠); 但是很容易切換到只在一行的開頭匹配這個模式的模式。
grep -o '^[^/]*' file
請注意添加了^
行錨點開頭,省略了-P
選項(無論如何您都沒有真正使用過)以及愚蠢的初學者錯誤{1}
。
(我應該補充一點,普通grep
不支持括號或重復; grep -E
可以很好地支持這些結構,您可以切換到腳趾 POSIX BRE 變體,這需要反斜杠才能使用圓括號或花括號作為元字符。您可能可以忽略這些細節並在任何地方使用grep -E
除非您確實需要grep -P
的功能,但也要注意-P
不可移植。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.