7
A
回答
4
$ foo=abc.def.out
$ echo ${foo%.out}
abc.def
一般情況下,刪除最短的後綴,使用:
$ echo ${foo%.*}
abc.def
要刪除最長的後綴,使用
$ echo ${foo%%.*}
abc
13
如果存儲這些字符串在文件(我們稱之爲input_file
):
# input_file:
abc.out abc.out abc.out
def.out def.out
def.out
你可以這樣做:
sed -i 's/\.out//g' input_file
,這將刪除該文件中的子.out
的任何事件。
說明:
sed
:調用sed工具來編輯-i
文本 流:使用「就地」選項 - 這個修改輸入文件,你提供給它,而不是寫作輸出到
's/\.out//g'
:使用正則表達式刪除.out
。末尾的g
表示刪除所有的事件。input_file
:指定輸入文件
stdout
如果這些字符串存儲在變量:
var1="abc.out"
您可以使用parameter subsitution:
var1=${var1%.out}
echo "$var1"
abc
說明:
- 從上面的鏈接:「$ {VAR%模式}從$ VAR刪除$圖案$ VAR的後端相匹配的最短部分。」
- 請注意,這裏提到的「圖案」被稱爲globbing,即different from regular expression in important ways。
11
多種方式,選擇:
str=abc.out
殼牌:
echo ${str%.*}
grep的:
echo $str | grep -o '^[^\.]*'
桑達:
echo $str | sed -E 's/(.*?)\..*/\1/'
awk中:
echo $str | awk -F. '{print $1}'
切割:
echo $str | cut -d. -f1
所有輸出:
abc
1
如果這些是文件名,您可以使用基本名稱。
$ basename a.out .out
會給你:
a
+0
如果你喜歡寫你的選項,'basename -s .out a.out'也可以工作。 –
1
我發現這個工作最好的,因爲你要使用可以在一個變量的模式:
DATA="abc.out"
pattern=".out"
DATA=${DATA/$pattern/}
echo "DATA=${DATA}"
結果是:
abc
相關問題
- 1. 優化Bash腳本,刪除子shell
- 2. 刪除文件shell腳本
- 3. shell腳本刪除N天
- 4. 如何刪除shell腳本中的字符串的子字符串?
- 5. Shell腳本刪除字符串前後的文本
- 6. C Shell腳本 - 刪除PathName達到FileName
- 7. Linux的shell腳本刪除數字
- 8. 使用shell腳本刪除換行符
- 9. 的Unix Shell腳本刪除 - 從文件
- 10. Shell腳本刪除一組文件
- 11. shell腳本刪除文件移動
- 12. 如何刪除在shell腳本
- 13. Shell腳本用於刪除craskernel
- 14. linux | awk | shell腳本塊刪除
- 15. 在shell腳本刪除某些字符
- 16. shell腳本在ubuntu上刪除備份
- 17. 創建和刪除每個shell腳本
- 18. 從shell腳本中刪除Node.js程序
- 19. Shell腳本刪除負整數
- 20. Shell腳本:刪除字符串中的所有空格字符
- 21. 在shell腳本中刪除字符串中的額外字符
- 22. 如何修復shell腳本中的字符串(刪除
- 23. Shell腳本Mac:通過目錄循環並刪除字符串
- 24. 從字符串中的shell腳本刪除單引號
- 25. 如何從Unix shell腳本的字符串中刪除字符?
- 26. Shell腳本刪除數字字符串後的新行
- 27. Shell腳本 - 刪除部分字符串。找不到文件
- 28. 在Shell腳本中刪除部分字符串
- 29. 如何在shell腳本中從YML中刪除子塊?
- 30. shell腳本從linux目錄中刪除文件和子目錄
您需要安裝en在你的sed版本上有一行代碼,'g'標誌可能是不可取的。 –
@WilliamPursell我想這取決於他的文件的確切輸入:你是對的,我應該讓我的假設更清楚。 –