回答
我覺得這些都是接近什麼你得到的,但不知道你真正想實現的,這是很難說。
echo "abc-1234a :" | egrep -o '^[^:]+'
...雖然這也會匹配沒有冒號的行。如果你只是想用冒號行,你必須只使用grep的,這可能工作:
echo "abc-1234a :" | grep : | egrep -o '^[^:]+'
當然,這僅是有道理的,如果你的echo "abc-1234a :"
是會與可能多行來替換示例輸入。
,你可以用最小的工具可能是cut
:
echo "abc-1234a :" | cut -d: -f1
而且sed
始終可用...
echo "abc-1234a :" | sed 's/ *:.*//'
對於這最後一個,如果你只想打印線,其中包括冒號,將其更改爲:
echo "abc-1234a :" | sed -ne 's/ *:.*//p'
哎呀,你甚至可以這樣做純粹的bash:
while read line; do
field="${line%%:*}"
# do stuff with $field
done <<<"abc-1234a :"
的信息在%%
位,可以man bash
並搜索「參數擴展」。
UPDATE:
你說:
它在輸入的冒號前的第一行的字符。 輸入可能有多行。
與grep
的解決方案可能不是你最好的選擇,那麼,因爲他們也會從後續行可能包括冒號打印數據。當然,還有很多方法可以解決這個需求。我們將與樣品輸入啓動:
$ function sample { printf "abc-1234a:foo\nbar baz:\nNarf\n"; }
$ sample
abc-1234a:foo
bar baz:
Narf
您可以使用多個管道,例如:
$ sample | head -1 | grep -Eo '^[^:]*'
abc-1234a
$ sample | head -1 | cut -d: -f1
abc-1234a
或者你可以用sed只處理的第一行:
$ sample | sed -ne '1s/:.*//p'
abc-1234a
或者在打印完第一行後告訴sed退出(這比讀取整個文件要快):
$ sample | sed 's/:.*//;q'
abc-1234a
還是做同樣的事情,但只顯示輸出,如果一個冒號被發現(安全):
$ sample | sed -ne 's/:.*//p;q'
abc-1234a
或者AWK做同樣的事情(最後3例,分別爲):
$ sample | awk '{sub(/:.*/,"")} NR==1'
abc-1234a
$ sample | awk 'NR>1{nextfile} {sub(/:.*/,"")} 1'
abc-1234a
$ sample | awk 'NR>1{nextfile} sub(/:.*/,"")'
abc-1234a
或者在bash,沒有管道都:
$ read line < <(sample)
$ printf '%s\n' "${line%%:*}"
abc-1234a
這是完美的!第二個選項適合我。我只是想要在第一行輸入中的冒號之前的字符。謝謝! – user1224949
建議稍作修改:'sed'/:/ {s /:.*//; q;}''而不是假設只有第一行輸入是有趣的。 –
@WilliamPursell - 好點,儘管OP確實說過(在對問題的評論中)字段名稱只能在第一行輸入中找到。 – ghoti
- 1. 如何打印使用Python一specifc字符模式?
- 2. 全局模式包括所有js排除某些結局
- 3. Python的re.findall打印所有模式
- 4. 用隱身字模式在隱身模式中打開Chrome
- 5. 如何打印XML模式
- 6. 如何以對角線模式打印字符串的字符?
- 7. 在Haskell中打印字符串模式
- 8. 使用preg_match_all中尋找模式,不包括配襯模式deliminator
- 9. 模態不打印內容包括
- 10. 如何打印不包含*部分*模式的文件的所有行
- 11. 正則表達式:爲什麼?模式匹配任何字符串中的空字符串「」,包括「a」本身?
- 12. 如何在未找到模式時打印「無模式」?
- 13. 如何用Django打印完整模式?
- 14. 打印時模式
- 15. AWK打印模式
- 16. 打印2D模式
- 17. 包含所有特殊字符的正則表達式模式
- 18. 打印到標準輸出所有匹配某種模式的文件夾
- 19. 如何在模式匹配後打印所有行
- 20. 正則表達式,直到一個模式的所有內容
- 21. 如果有任何使用grep/awk打印所有不同的模式,如果有任何使用grep/awk
- 22. 打印模式用C
- 23. 正則表達式:匹配的模式,但不包括模式
- 24. 在使用sed的模式之間打印字符串
- 25. 字符串模式匹配的和不包含某些字
- 26. 如何反覆打印該字符串直到達到某個數字?
- 27. Perl正則表達式 - 捕獲所有字符,直到出現模式
- 28. 使用模式匹配某個字符後如何獲得字符串?
- 29. 按字符打印一個字符串,包括控制字符
- 30. 打印一個字符串,其中包含一個特定的模式在Java
歡迎的StackOverflow!這聽起來像一個[XY問題](http://mywiki.wooledge.org/XyProblem)。 [你真的*試圖做什麼](http://meta.stackexchange.com/a/66378/174723)? – ghoti
這是什麼模式?冒號?空白結腸?你只處理一行輸入(就像你的回聲),還是你在處理多行輸入?如果它是一個多行輸入,你在尋找1..N行,其中N是包含該模式的第一行,忽略其餘行,或者你是在尋找每一行的起始段直到該行上的模式? –
謝謝你們!這是冒號前第一行輸入的字符。輸入可能有多行。 – user1224949