去除導致部分如何刪除部分字符串達到一定的角色?如何在bash
例如)如果我有字符串testFile.txt.1
和testFile.txt.12345
如何刪除1
和12345
?
編輯:我的意思是,除去和扔掉一個字符串中的第一部分,以某個字符,並保持它的結束。
去除導致部分如何刪除部分字符串達到一定的角色?如何在bash
例如)如果我有字符串testFile.txt.1
和testFile.txt.12345
如何刪除1
和12345
?
編輯:我的意思是,除去和扔掉一個字符串中的第一部分,以某個字符,並保持它的結束。
只使用bash的設施
$ s=testFile.txt.1
$ echo ${s%.*}
testFile.txt
$ s=testFile.txt.12345
$ echo ${s%.*}
testFile.txt
刪除之前前導零
$ echo ${s#*.}
txt.12345
其他方法,您可以使用IFS
$ s=testFile.txt.12345
$ IFS="."
$ set -- $s
$ echo $1
testFile
$ echo $2
txt
$ echo $3
12345
如果你只是想刪除從文件名的後綴知道,你可以使用basename
:
basename testFile.txt.1 .1
basename testFile.txt.12345 .12345
有沒有一種優雅的方式可以在同一行中刪除該領先期? 我可以做到兩個,我只是好奇......非常感謝您的幫助! – 2010-04-21 04:17:32
我不確定你在討論什麼領先階段 – 2010-04-21 04:32:57
你可以用sed做一個搜索和替換。 <<<
運算符將在stdin中傳遞一個字符串。
$ sed 's/\.[0-9]*$//' <<< "testFile.txt.1"
testFile.txt
$ sed 's/\.[0-9]*$//' <<< "testFile.txt.12345"
testFile.txt
請注意,如果你正在處理大量文件,如果它啓動一個新進程('sed'),將花費比「純粹的bash」解決方案明顯更長的時間每一個。 – drevicko 2013-06-19 03:04:28
問題分割你串起來有點不清楚 - 例如e提供的可能意味着您想刪除所有#,或者刪除最後一個「。」後面的部分,或者刪除第一個「1」後的部分,或者刪除字符13後的所有字符。請澄清。
如果你的意思是你想刪除的字符串(例如,「最多字符#13」)前N個字符,做echo testFile.txt.1 | cut -c14-
。另一方面,要保留字符1-13,請執行以下操作:echo testFile.txt.1 | cut -c1-13
如果您的意思是要在首次出現特定字符(在您的示例中似乎爲「1」)之前刪除起始字符, ,做echo testFile.txt.1 | perl -e 's/^[^1]*//;'
。要如果要刪除後,最後刪除一切一切之後的第一個「1」,做echo testFile.txt.1 | perl -e 's/1.*$//;'
如果你想刪除所有#分別,做echo testFile.txt.1 | perl -e 's/\d//g;'
或不Perl中,echo testFile.txt.1 | tr -d "[0-9]"
「」做echo testFile.txt.1 | perl -e 's/\.[^.]+/./;'
爲什麼倒票? – DVK 2010-04-21 04:39:53
# remove string prefix up to the first digit
var='testFile.txt.12345'
var='test1File.txt.12345'
var='testFile.txt.1'
var='testFile.txt'
echo "${var#"${var%%[[:digit:]]*}"}"
這個問題有點不清楚 - 請你澄清「刪除部分字符串到某個字符?」;這個例子可以用很多方式來解釋,說實話,其中的大部分都是爲了「在特定角色之後移除」而不是「到達」。 – DVK 2010-04-21 04:27:44