我有一個文件:START.txt
用線,如:時間戳 - 正則表達式從一種格式更改爲另一個
13.03.2013 12:13:42|STRING1|NUMBER1|NUMBER2|NUMBER3
,我想改變,從這個文件中的所有行的格式如下:
12:13|STRING1|NUMBER1|NUMBER2|NUMBER3
這怎麼辦?
我有一個文件:START.txt
用線,如:時間戳 - 正則表達式從一種格式更改爲另一個
13.03.2013 12:13:42|STRING1|NUMBER1|NUMBER2|NUMBER3
,我想改變,從這個文件中的所有行的格式如下:
12:13|STRING1|NUMBER1|NUMBER2|NUMBER3
這怎麼辦?
試試這個GNU sed
命令,
$ sed -r 's/^[^ ]+? ([0-9]{2}:[0-9]{2}):[0-9]{2}(.*)$/\1\2/g' file
12:13|STRING1|NUMBER1|NUMBER2|NUMBER3
並通過AWK,
$ awk -F'|' -v OFS='|' '{sub (/^[^ ]+? /,"",$1); sub (/:[0-9]{2}$/,"",$1);}1' file
12:13|STRING1|NUMBER1|NUMBER2|NUMBER3
對於sed'解決方案來說+1,但'+'而不是'+?'會做(除了不必要的,替換它可以讓你的解決方案在FreeBSD/OSX上工作爲那麼,如果你還用'-E'替換'-r':'sed -E's/^ [^] +([0-9] {2}:[0-9] {2}):[0 -9] {2}(。*)$/\ 1 \ 2/g'file') – mklement0
像這樣'sed's/^ [^] \ + \([0-9] \ {2 \}: 0-9] \ {2 \} \):[0-9] \ {2 \} \(。* \)$/\ 1 \ 2/g'file' –
是的,使用_basic_正則表達式更便於使用,但是您使用的不是POSIX basic-regex規範(http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03)的一部分,並且無法使用例如OSX;將它替換爲'\ {1,\}':'sed's/^ [^] \ {1,\} \([0-9] \ {2 \}:[0-9] \ {2 \} \):[0-9] \ {2 \} \(。* \)$/\ 1 \ 2/g'file' – mklement0
使用awk
:
$ awk 'BEGIN{FS=OFS="|"}{split($1,fld,/[.: ]/);$1=fld[4]":"fld[5]}1' file
12:13|STRING1|NUMBER1|NUMBER2|NUMBER3
|
。.
和:
,並將值放入數組fld
。1
打印行(這是說{print $0}
的慣用方式。這裏是一個awk
awk '{sub(/:[0-9]+\|/,"|",$2);print $2}' file
12:13|STRING1|NUMBER1|NUMBER2|NUMBER3
只要刪除從第二部分開始打印
+1;聰明 - 迄今爲止最簡單的解決方案。 – mklement0
「這怎麼辦?」,你問。通過解析輸入,丟掉位你不想要,並保持你想要的位。可能用'awk'。或'python'或'perl'。或者甚至可能是'sed' ... – twalberg