我有一个名为字符串:
abc.out
def.out
如何删除子
.OUT
在这些字符串?
我应该使用什么命令? (Bourne shell)中
我有一个名为字符串:
abc.out
def.out
如何删除子
.OUT
在这些字符串?
我应该使用什么命令? (Bourne shell)中
多种方式,选择:
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
如果这些字符串存储在一个文件中 (我们称之为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
:使用“就地”选项-这个修改输入文件,你提供给它,而不是写输出到stdout
's/\.out//g'
使用正则表达式来删除.out
。 所述g
在结束装置删除所有出现。 input_file
:指定输入文件 如果这些字符串存储在变量:
var1="abc.out"
您可以使用参数subsitution :
var1=${var1%.out}
echo "$var1"
abc
说明:
$ foo=abc.def.out
$ echo ${foo%.out}
abc.def
在一般情况下,删除最短的后缀,使用方法:
$ echo ${foo%.*}
abc.def
要删除最长的后缀,使用
$ echo ${foo%%.*}
abc
我发现这个工作最好的,因为你要使用可以在一个变量的模式:
DATA="abc.out"
pattern=".out"
DATA=${DATA/$pattern/}
echo "DATA=${DATA}"
其结果是:
abc
如果这些文件名,您可以使用基名。
$ basename a.out .out
会给你:
a