我有字符串叫:
abc.out
def.out
Run Code Online (Sandbox Code Playgroud)
如何删除子字符串
.OUT
在这些字符串?
我应该使用什么命令?(伯恩贝壳)
Chr*_*our 22
多种方式,选择:
str=abc.out
贝壳:
echo ${str%.*}
Run Code Online (Sandbox Code Playgroud)
grep的:
echo $str | grep -o '^[^\.]*'
Run Code Online (Sandbox Code Playgroud)
桑达:
echo $str | sed -E 's/(.*?)\..*/\1/'
Run Code Online (Sandbox Code Playgroud)
AWK:
echo $str | awk -F. '{print $1}'
Run Code Online (Sandbox Code Playgroud)
切:
echo $str | cut -d. -f1
所有输出:
abc
Run Code Online (Sandbox Code Playgroud)
sam*_*hen 17
如果这些字符串存储在一个文件中(让我们称之为input_file
):
# input_file:
abc.out abc.out abc.out
def.out def.out
def.out
Run Code Online (Sandbox Code Playgroud)
你可以做:
sed -i 's/\.out//g' input_file
Run Code Online (Sandbox Code Playgroud)
这将删除.out
该文件中出现的任何子字符串.
说明:
sed
:调用sed工具编辑文本流-i
:使用"就地"选项 - 这会修改您提供的输入文件,而不是将输出写入 stdout
's/\.out//g'
:使用正则表达式删除.out
.在g
末意味着删除所有出现.input_file
:指定输入文件如果这些字符串存储在变量中:
var1="abc.out"
Run Code Online (Sandbox Code Playgroud)
您可以使用参数替换:
var1=${var1%.out}
echo "$var1"
abc
Run Code Online (Sandbox Code Playgroud)
说明:
我发现此方法效果最好,因为您要使用的模式可以在变量中:
DATA="abc.out"
pattern=".out"
DATA=${DATA/$pattern/}
echo "DATA=${DATA}"
Run Code Online (Sandbox Code Playgroud)
结果是:
abc
$ foo=abc.def.out
$ echo ${foo%.out}
abc.def
Run Code Online (Sandbox Code Playgroud)
一般来说,要删除最短后缀,请使用:
$ echo ${foo%.*}
abc.def
Run Code Online (Sandbox Code Playgroud)
要删除最长的后缀,请使用
$ echo ${foo%%.*}
abc
Run Code Online (Sandbox Code Playgroud)