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