我想格式化日期命令以用作日志檔案名。理想情況下,我想使用這樣的命令:
set dt (echo (date)) && string join '' $dt
當我運行它時,我得到正常的日期輸出:
Tue Jun 7 22:25:26 PDT 2022
我想要這樣的輸出:
TueJun722:26:09PDT2022
有沒有辦法為此使用管道命令?
uj5u.com熱心網友回復:
這里的重要部分是:
與 bash 不同,fish 僅在換行符上拆分命令替換,而不是其他空格。空格和制表符無關緊要。
set dt (echo (date)) && string join '' $dt
這是做什么的:
- 運行
date- 這列印Tue Jun 7 22:25:26 PDT 2022 - 在換行符上拆分。沒有換行符(除了最后),所以這最終成為一個論點
- 運行等效項
echo 'Tue Jun 7 22:25:26 PDT 2022'并將其拆分為換行符(再次在字串中沒有換行符) - 運行相當于
set dt 'Tue Jun 7 22:25:26 PDT 2022' - 這成功了(因為成功
echo了,而且基本上總是成功),所以我們繼續 - 運行相當于
string join '' 'Tue Jun 7 22:25:26 PDT 2022'- 變數被設定為一個引數,因此它將擴展到一個引數(沒有像 bash 中那樣的分詞) string join僅在引數之間添加連接符,因此由于只有一個引數,因此按原樣列印
你想要的是要么
- 洗掉所有空格
string replace - 在空格上拆分您的日期,然后加入它
前者:
set dt (date | string replace -ra '\s*' '')
這string replace在正則運算式模式 ( -r) 下運行并告訴它替換一行中的所有出現 ( -a- 這就像seds '/g' 修飾符)。string可以在命令列或通過管道獲取它的引數,如果你有一個外部命令,它讀起來更好,你不必擺弄--選項分隔符。
后者:
set dt (date | string split -n ' ' | string join '')
該-n裝置string split將跳過空條目。請注意,前者洗掉了所有空格(包括例如制表符),而后者只關心實際的空格字符。因為date它似乎沒有什么不同。
或者,您可以擺弄日期的格式字串。我會把它留給讀者。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491447.html
上一篇:在n個非連續空行后拆分檔案
下一篇:替換一列bash中的模式
