我正在尝试编写一个脚本来删除最后一个“/”在 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)!!'
说明:删除/
前面有非空格字符且后面有空格车的任何内容