1

我有一个命令给我输出:

/home/konnor/md5sums:ea66574ff0daad6d0406f67e4571ee08  counted-file.xml.20131003-083611

我需要输出为:

ea66574ff0daad6d0406f67e4571ee08  counted-file.xml

我得到的最接近的是:

$ echo /home/konnor/md5sums:ea66574ff0daad6d0406f67e4571ee08  counted-file.xml.20131003-083611 | awk '{ printf "%s", $1 }; END { printf "\n" }'

/home/konnor/md5sums:ea66574ff0daad6d0406f67e4571ee08

我不熟悉 awk 但我相信这是我想使用的命令,有人有什么想法吗?

4

4 回答 4

2

不确定这是否适合您:

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

用你的例子:

kent$  echo "/home/konnor/md5sums:ea66574ff0daad6d0406f67e4571ee08  counted-file.xml.20131003-083611"|sed 's/^.*:\(.*\)\.[^.]*$/\1/'                                        
ea66574ff0daad6d0406f67e4571ee08  counted-file.xml

这条grep行也有效:

grep -Po ':\K.*(?=\..*?$)'
于 2013-10-03T16:43:48.740 回答
2
$ awk -F[:.] -v OFS="." '{print $2,$3}' <<< "/home/konnor/md5sums:ea66574ff0daad6d0406f67e4571ee08 counted-file.xml.20131003-083611"
ea66574ff0daad6d0406f67e4571ee08 counted-file.xml
于 2013-10-03T16:45:12.973 回答
2

或者只是一个 sed oneliner:

 echo /home/konnor/md5sums:ea66574ff0daad6d0406f67e4571ee08  counted-file.xml.20131003-083611 \
     | sed -E 's/.*:(.*\.xml).*/\1/' 
于 2013-10-03T16:42:05.020 回答
2
$ echo "/home/konnor/md5sums:ea66574ff0daad6d0406f67e4571ee08  counted-file.xml.20131003-083611" |
  cut -d: -f2 |
  cut -d. -f1-2
ea66574ff0daad6d0406f67e4571ee08  counted-file.xml

请注意,这取决于 ..中存在的点counted-file.xml

于 2013-10-03T16:42:21.707 回答