删除第一个和最后一个字符(如果存在)

删除第一个和最后一个字符(如果存在)

我需要删除文件中每一行的前两个字符(始终相同)和最后一个“/”(如果存在)。

文件 F1 中的输入是:

^./inst/oracle/
^./tmp/
^./inst/maj/
^./mkcd
^./var/adm/ras/livedump/

使用 :

cat F1 | sed 's#^\^\.\(.*\)/$#\1#'

我得到以下结果:

/inst/oracle
/tmp
/inst/maj
^./mkcd
^./var/adm/ras/livedump/

sed 末尾带有“g”的结果相同

最后几行将被忽略。我不明白为什么它在前 3 行完成工作然后停止。

答案1

尝试这个:

sed 's/\^\.//;s|/$||' file

输出:

/inst/oracle
/tmp
/inst/maj
/mkcd
/var/adm/ras/livedump

答案2

为了多样化,这里是使用多行脚本代替的解决方案sed

while IFS='' read -r line
do
  line="${line%/}"
  echo "${line#??}"
done

答案3

这应该有效:

sed 's|\^\.\(.*[^\/]\)\/*$|\1|g' file

输出:

/inst/oracle  
/tmp  
/inst/maj  
/mkcd   
/var/adm/ras/livedump

相关内容