如何使用shell脚本删除子字符串
我把字符串称为:如何使用shell脚本删除子字符串,shell,substring,Shell,Substring,我把字符串称为: abc.out def.out 如何删除子字符串 .出去 在这些串里 我应该使用什么命令? (伯恩壳牌) 通常,要删除最短的后缀,请使用: $ echo ${foo%.*} abc.def 要删除最长的后缀,请使用 $ echo ${foo%%.*} abc 如果这些字符串存储在文件中(我们称之为输入文件): 你可以做: sed -i 's/\.out//g' input_file 这将删除该文件中出现的子字符串.out 说明: var1="abc.out" echo
abc.out
def.out
如何删除子字符串
.出去
在这些串里
我应该使用什么命令?
(伯恩壳牌)
通常,要删除最短的后缀,请使用:
$ echo ${foo%.*}
abc.def
要删除最长的后缀,请使用
$ echo ${foo%%.*}
abc
如果这些字符串存储在文件中(我们称之为
输入文件
):
你可以做:
sed -i 's/\.out//g' input_file
这将删除该文件中出现的子字符串.out
说明:
var1="abc.out"
echo ${str%.*}
echo $str | grep -o '^[^\.]*'
echo $str | awk -F. '{print $1}'
abc
:调用该工具编辑文本流sed
:使用“就地”选项-这会修改您提供的输入文件,而不是将输出写入-i
stdout
:使用正则表达式删除's/\.out//g'
。末尾的.out
表示删除所有事件g
:指定输入文件输入文件
如果这些字符串存储在变量中:
var1="abc.out"
echo ${str%.*}
echo $str | grep -o '^[^\.]*'
echo $str | awk -F. '{print $1}'
abc
您可以使用:
说明:
var1="abc.out"
echo ${str%.*}
echo $str | grep -o '^[^\.]*'
echo $str | awk -F. '{print $1}'
abc
- 从上面的链接:“${var%Pattern}从$var中删除与$var后端匹配的$Pattern的最短部分。”
- 请注意,这里提到的“模式”称为globbing,即
str=abc.out
外壳:
var1="abc.out"
echo ${str%.*}
echo $str | grep -o '^[^\.]*'
echo $str | awk -F. '{print $1}'
abc
Grep:
var1="abc.out"
echo ${str%.*}
echo $str | grep -o '^[^\.]*'
echo $str | awk -F. '{print $1}'
abc
Sed:
echo $str | sed -E 's/(.*?)\..*/\1/'
Awk:
var1="abc.out"
echo ${str%.*}
echo $str | grep -o '^[^\.]*'
echo $str | awk -F. '{print $1}'
abc
剪切:
var1="abc.out"
echo ${str%.*}
echo $str | grep -o '^[^\.]*'
echo $str | awk -F. '{print $1}'
abc
echo$str | cut-d-f1
所有输出:
var1="abc.out"
echo ${str%.*}
echo $str | grep -o '^[^\.]*'
echo $str | awk -F. '{print $1}'
abc
如果这些是文件名,则可以使用basename
$ basename a.out .out
将为您提供:
a
我发现这样做效果最好,因为您要使用的模式可以在变量中:
DATA="abc.out"
pattern=".out"
DATA=${DATA/$pattern/}
echo "DATA=${DATA}"
结果是:
abc
zsh
中的一个示例:
% myVar="abc.out def.out ghi.out"
% myVar=${myVar:s/.out/} # replace first match of ".out" with ""
% echo myVar
abc def.out ghi.out
% myVar=${myVar:gs/.out/} # replace all matches of ".out" with ""
% echo myVar
abc def ghi
您的sed版本需要一个行结束锚,而
g
标志可能是不可取的。@Williampersell我想这取决于他的文件的精确输入:您是对的,我应该让我的假设更清楚。basename-s.out a.out
如果您喜欢编写选项,也可以使用。前缀也可以:)谢谢!