Bash
為什麼在 bash 腳本與 bash 命令行中執行相同的 sed 正則表達式(在 grep 之後)會失敗?
這是腳本。當我從BASH 提示符執行它時它是成功的,但不是在腳本中。有任何想法嗎?
當我說“失敗”時,我的意思是
sed regex
不匹配任何內容,因此沒有替換文本。當我在命令行上執行它時,它匹配。另外,我可能對此有一個答案。這與我的
grep
別名有關,並且GREP_OPTIONS
有一種奇怪的相互作用。我會回复這些細節。#!/bin/bash for ((x = 101; x <= 110; x++)); do urls="${urls} www$x.site.com/config" done; curl -s ${urls} | grep -i "Git Commit" | sed -r "s/.*Git Commit<\/td><td>([^<]+).*/\1/g"
我實際上能夠弄清楚這一點,我想我會在這里為下一個將頭撞在同一堵牆上的Google使用者添加它。
我有一個 grep 別名並
GREP_OPTIONS
設置。這導致顏色突出顯示在腳本中保持打開狀態,即使在管道到另一個命令時也是如此。這通常不能很好地與sed
.這是我的 .alias 和選項:
alias grep='grep -i --color' export GREP_OPTIONS="--color=always"
因此,從腳本執行時,它不使用別名命令,因此強制顏色始終處於打開狀態。因此,當我檢查我的別名並看到該
--color
選項時(這意味著auto
,這意味著“不要為通過管道傳輸到另一個命令的輸出著色”(如sed
)。我很困惑,因為我忘記了我也設置
GREP_OPTIONS
了,所以我希望grep
腳本中的預設color
設置為auto
(就像我沒有設置 global 一樣GREP_OPTIONS
)。但並非如此。這是我的新設置(我認為
--color
標誌GREP_OPTIONS
是多餘的,但我把它留在那裡作為提醒):alias grep='grep --color=always' export GREP_OPTIONS="--ignore-case --color"
這樣,每當我在命令行上時,我都會突出顯示我所有的 grep(這通常是我想要的)。但是在腳本中,只有在不通過管道傳輸到另一個命令時才會預設著色。我仍然必須將 –color=always 添加到我的許多腳本中(因為在大多數情況下我更喜歡突出顯示,即使在管道到另一個命令時,除非我看不到輸出)。