用于替换安装点中最后一个斜杠的脚本

用于替换安装点中最后一个斜杠的脚本

我正在尝试编写一个脚本来删除最后一个“/”在 fstab 内的挂载点中。

我创建了这个 shell 脚本,但是我对结果不满意。不知道有谁知道如何用awk替换?

我想从这里开始:

/dev/mapper/vgurano-lvfix /urano/fix/     ext4    defaults        0 0

对此:

/dev/mapper/vgurano-lvfix /urano/fix     ext4    defaults        0 0

我在几个服务器上遇到这个问题,有几个文件系统,而且我们使用的监控系统对最后一个 / 不友好。

我的脚本是这样的:

fsmp="/urano/fix/AIX_MLs"
lastc=`grep -i $fsmp /etc/fstab | awk '{print $2}' | sed -e "s/^.*\(.\)$/\1/"`
filesystem=`grep -i $fsmp /etc/fstab | awk '{print $2}'`
1part=`grep -i $fsmp /etc/fstab | awk '{print $1}'`
rest=`grep -i $fsmp /etc/fstab | awk '{print $3" "$4" "$5" "$6}'`
if [ "$lastc" = "/" ]
then
  woslash=`echo $filesystem | awk -F/ '{OFS="/";NF--;print $0;}'`
  echo "$1part $woslash $rest"
fi

答案1

单程:

$ x="/dev/mapper/vgurano-lvfix /urano/fix/ ext4 defaults 0 0"
$ echo "$x" | awk '{gsub(/\/$/,"",$2);}1'
/dev/mapper/vgurano-lvfix /urano/fix ext4 defaults 0 0
$

使用 gsub,替换末尾的斜杠(如果存在)。

答案2

要从文件<dir>字段中删除最后一个斜杠/etc/fstab(请注意,可能存在/由单斜杠表示的根目录):

假设我们有这样的/etc/fstab内容:

/dev/mapper/vgurano-lvfix      /urano/fix/      ext4      defaults      0      0
/dev/sda1       /      ext4      defaults,noatime      0      1

awk

awk '$2~/.\/$/{ sub(/\/$/,"",$2) }1' /etc/fstab

输出:

/dev/mapper/vgurano-lvfix /urano/fix ext4 defaults 0 0
/dev/sda1              /             ext4      defaults,noatime      0      1

答案3

另一种选择是:

awk '{ if ( substr($2,length($2)) == "/" ) $2=substr($2,1,length($2)-1) }1' <<< "/dev/mapper/vgurano-lvfix /urano/fix ext4 defaults 0 0"

结果:

/dev/mapper/vgurano-lvfix /urano/fix ext4 defaults 0 0

答案4

在 fstab 的特定上下文中,尝试:

perl -pe 's!(?<=\S)/(?=\s)!!'

说明:删除/前面有非空格字符且后面有空格车的任何内容

相关内容