我有文件名如Tarun_Verma_25_02_2016_10_00_10.csv
。我如何在shell腳本中從它提取字符串25_02_2016_10_00_10
?如何提取shell腳本中的字符串
據沒有證實的數字部分有多少會後,「名字」 _「姓氏」
一個單行的解決方案將是首選。
我有文件名如Tarun_Verma_25_02_2016_10_00_10.csv
。我如何在shell腳本中從它提取字符串25_02_2016_10_00_10
?如何提取shell腳本中的字符串
據沒有證實的數字部分有多少會後,「名字」 _「姓氏」
一個單行的解決方案將是首選。
ksh93支持語法bash調用extglobs開箱即用。因此,在ksh93的,你可以做到以下幾點:
f='Tarun_Verma_25_02_2016_10_00_10.csv'
f=${f##+([![:digit:]])} # trim everything before the first digit
f=${f%%+([![:digit:]])} # trim everything after the last digit
echo "$f"
爲了做同樣在bash,你要運行以下命令第一
shopt -s extglob
由於這種使用shell本地字符串操作,在處理僅一行輸入時,它的運行速度要比調用外部命令(sed,awk等)快得多。 (當使用ksh93而不是bash時,即使對於大量輸入也很快)。
感謝您的答案:) –
如果你想在這部分你挑選出一些控制(假設格式總是喜歡<firstname>_<lastname>_<day>_<month>_<year>_<hour>_<minute>_<second>.csv
)awk
將是非常方便的
echo "Tarun_Verma_25_02_2016_10_00_10.csv" | awk -F"[_.]" 'BEGIN{OFS="_"}{print $3,$4,$5,$6,$7,$8}'
這裏awk
分割雙方強調和週期,設置輸出字段分隔符爲下劃線,然後打印出你感興趣的文件名的部分。
感謝您的答案..但它不確認多少部分將在那裏後「firstName」_「姓氏「.....以上一個將無法工作:( –
我已經添加到原始問題,以幫助指導未來的答案。 – JNevill
與sed
$ echo Tarun_Verma_25_02_2016_10_00_10.csv | sed -r 's/[^0-9]*([0-9][^.]*)\..*/\1/'
25_02_2016_10_00_10
提取第一個數字和點之間的所有內容。
你的文件名格式是什麼?你想在'.'之前的所有數字嗎? – slugo
對單線球員的要求一般都不被接受 - 如果你關心的不僅僅是正確性,還應該在Code Golf上問,而不是SO。 –
是的......我想要之前的每一件事情都是「。」和「Tarun_Verma_」之後..請提示!! –