如何使用shell脚本删除子(How to delete a substring using she

2019-08-03 05:10发布

我有一个名为字符串:

abc.out
def.out

如何删除子

.OUT

在这些字符串?

我应该使用什么命令? (Bourne shell)中

Answer 1:

多种方式,选择:

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


Answer 2:

如果这些字符串存储在一个文件中 (我们称之为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

说明:

  • 从上面的链接:“$ {VAR%模式}从$ VAR删除$图案$ VAR的后端相匹配的最短部分。”
  • 请注意,这里所说的“模式”被称为通配符,这是从重要的方面正则表达式不同 。


Answer 3:

$ foo=abc.def.out
$ echo ${foo%.out}
abc.def

在一般情况下,删除最短的后缀,使用方法:

$ echo ${foo%.*}
abc.def

要删除最长的后缀,使用

$ echo ${foo%%.*}
abc


Answer 4:

我发现这个工作最好的,因为你要使用可以在一个变量的模式:

DATA="abc.out"
pattern=".out"
DATA=${DATA/$pattern/}
echo "DATA=${DATA}"

其结果是:

abc



Answer 5:

如果这些文件名,您可以使用基名。

$ basename a.out .out

会给你:

a


文章来源: How to delete a substring using shell script