使用awk修改输出

时间:2013-10-03 16:38:37

标签: linux bash awk

我有一个命令给我输出:

/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 个答案:

答案 0 :(得分:2)

或者只是一个ondiner:

 echo /home/konnor/md5sums:ea66574ff0daad6d0406f67e4571ee08  counted-file.xml.20131003-083611 \
     | sed -E 's/.*:(.*\.xml).*/\1/' 

答案 1 :(得分: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

答案 2 :(得分: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.*(?=\..*?$)'

答案 3 :(得分:2)

$ awk -F[:.] -v OFS="." '{print $2,$3}' <<< "/home/konnor/md5sums:ea66574ff0daad6d0406f67e4571ee08 counted-file.xml.20131003-083611"
ea66574ff0daad6d0406f67e4571ee08 counted-file.xml