提取最后一个冒号之前的字符

提取最后一个冒号之前的字符

我需要提取最后一个冒号之前的字符,并删除最后一行中的:方括号。[]我的文件结构是

256.XXX.XXX.X:20234
214.XXX.XXX.X:7249
[2200:XXXX:XXXX:XXX:XXXX:XXXX:XXXX:XXXX]:46288

我需要以下形式的输出文件:

256.XXX.XXX.X
214.XXX.XXX.X
2200:XXXX:XXXX:XXX:XXXX:XXXX:XXXX:XXXX

答案1

删除最后一个冒号之后的所有内容,然后删除任何地方留下的任何括号:

sed 's/:[^:]*$//; s/[][]//g'

或者

sed 's/\(.*\):.*/\1/; s/[][]//g'

.*(这里使用第一个将是贪婪的并吞下:尽可能多的 s 的事实)。

答案2

这将提取最后一个“冒号”之前的所有字符,并删除括号 [ ],如您给出的示例。

rev <yourfile.txt | cut -d: -f2- | rev | tr -d '[]'

将 yourfile.txt 替换为您的文件名或删除该单词<yourfile.txt以读取标准输出。

答案3

仅限外壳:

while IFS= read -r line; do
    tmp=${line%:*}               # remove last colon and following chars
    tmp=${tmp#"["}               # remove leading open bracket
    result=${tmp%"]"}            # remove trailing close bracket
    printf "%s\n" "$result"
done < file

答案4

命令:

awk -F ":" 'OFS=":"{$NF="";print $0}' filename | sed "s/:$//g"| sed "s/^\[//g"|sed "s/\]//g"

输出

256.XXX.XXX.X
214.XXX.XXX.X
2200:XXXX:XXXX:XXX:XXXX:XXXX:XXXX:XXXX

相关内容