2014-09-12 4 views
0

에 대시를 교체합니다 내가 타임 스탬프를 교체하고 싶습니다 그래서타임 스탬프

2014-06-04 00:00:06.487,,4324 
    2014-06-04 00:00:43.487,,-2321 

같은 타임 스탬프를 가진 파일이 - (대시)와/

그래서 대신과 같이를 (슬래시) :

2014/06/04 00:00:06.487,,4324 
    2014/06/04 00:00:43.487,,-2321 

sed와 함께 할 수 있는지 궁금합니다. 어떻게해야합니까? 나오지도 GNU를 통해

답변

1

, 펄을 통해

$ sed -r 's~-([0-9]{2}\b)~/\1~g' file 
    2014/06/04 00:00:06.487,,4324 
    2014/06/04 00:00:43.487,,-2321 

,

$ perl -pe 's~-(?=\d{2}\b)~/~g' file 
    2014/06/04 00:00:06.487,,4324 
    2014/06/04 00:00:43.487,,-2321 
3

내가 할 것 :

awk 'gsub(/-/,"/",$1)||7' file 

이것은 단지, 첫 번째 열에서 -를 대체 할 당신의 예제에있는 날짜는 -으로 변경하지 마십시오.

예 :

kent$ cat f 
2014-06-04 00:00:06.487,,4324 
2014-06-04 00:00:43.487,,-2321 

kent$ awk 'gsub(/-/,"/",$1)||7' f 
2014/06/04 00:00:06.487,,4324 
2014/06/04 00:00:43.487,,-2321 

날짜의 문자열이 너무, 우리가 모든 필드를 통해 이동하고 xxxx-xx-xx 후 교체 할 수와 일치하는지 확인해야 다른 열이 될 수 있다면. 그것은 또한 awk을위한 쉬운 작업이다. 이 경우인지 알려주세요.

+1

은'awk' 날짜의 앞에 공백을 제거하지,'sed'하지 않습니다. 그것의 확실하지 OP에 대한 문제입니다. – Jotne

1

또 다른 방법은 sed에 숫자 인수를 사용하여 하나의 패턴 만 두 번 일치시키는 것입니다. (하나의 명령으로 처리 할 수 ​​없었습니다).

$ echo '2014-06-04 00:00:43.487,,-2321' | sed -e '[email protected]@/@1;[email protected]@/@1' 
2014/06/04 00:00:43.487,,-2321 

또한 같은 논리를 사용하여 Perl로 쉽게 수행 할 수 있습니다

$ echo '2014-06-04 00:00:43.487,,-2321' |perl -ne 'print join("/", split(/-/, $_, 3));' 
2014/06/04 00:00:43.487,,-2321