如何删除最后一个斜杠后的字符和使用sed后的两个字符?

时间:2016-02-16 17:14:35

标签: regex sed

下面是示例文件,我想在最后一次出现斜杠(/)之后修剪最后一个字符,然后在它之后跟两个字符。

cat sample.txt
HOME_1, /u01/app/oracle/or121022
HOME_2, /u01/app/oracle/or112100881
HOME_3, /uo1/app/mysql/my588822222

我正在尝试这样的事情:

cat sample.txt |  sed 's%/[^/]\.\.*$%/\.\.%'

预期产出:

HOME_1, /u01/app/oracle/or
HOME_2, /u01/app/oracle/or
HOME_3, /uo1/app/mysql/my

非常感谢任何帮助。

谢谢!

3 个答案:

答案 0 :(得分:1)

记住捕获组中斜线后面的两个字符:

sed 's%\(/..\)[^/]*$%\1%'

[^/]*$匹配字符串的其余部分直到行尾,当整个匹配仅被记住的部分替换时,它被删除。

答案 1 :(得分:0)

这是一个基于非正则表达式的awk解决方案:

awk -F/ -v OFS=/ '{$NF=substr($NF, 1, 2)} 1' file

/使用字段分隔符,因此在$NF中给出最后一部分,然后使用substr我们得到前2个字符。

<强>输出:

HOME_1, /u01/app/oracle/or
HOME_2, /u01/app/oracle/or
HOME_3, /uo1/app/mysql/my

答案 2 :(得分:0)

awk '{sub(/[0-9]+$/,"",$2)}1' file
HOME_1, /u01/app/oracle/or
HOME_2, /u01/app/oracle/or
HOME_3, /uo1/app/mysql/my

一个awk示例,它删除了col $ 2末尾的数字。 但我们可以跳过这部分“,2美元”,它仍然有效。