리눅스 sed 명령어 사용법 질문입니다.
글쓴이: seren0924 / 작성시간: 월, 2013/12/09 - 3:09오후
sed를 사용해서 Lastname Firstname 이런 것을 Firstname Lastname 이렇게 변경할려고 합니다.
정규표현식을 사용해서 sed 's/^\([A-Z][A-Za-z]*\), \([A-Z][A-Za-z]*\)/\2 \1/' filename 이렇게 사용하라고 나와있는데.. 도통이해가 안가서요.
그냥 간단하게 Lastname Firstname 이걸로는 어떻게해야하나요? 제가 리눅스 초보라 헤매고있네요ㅠㅠ
Forums:
두서없이 설명드립니다.
정규식에서 괄호로 싸면, 대치시 \1, \2 형태로 참조하여 받을 수 있습니다.
그러므로, 두 단어을 찾아서 순서를 바꾸므로 뒤에 '\2 \1' 형태로 대치한 것입니다.
s는 대치를 의미하는 명령입니다. /1/2/ 형태로 사용하며, 1을 찾아서 2로 바꾼다는 의미입니다.
[A-Z] 형태는 대문자로 시작한다는 것을 나타내는 기호. (문맥상)
+
[A-Za-z] 형태는 영문자를 나타내는 기호.
+
* 형태는 앞의 문자가 반복됨을 나타내는 기호.
= 영문자 대문자로 시작하여, 대소문자 영문자를 포함하는 것이 연속된 것을 찾는다.
중간에 ,문자는 어떤 의미인지? ',' 문자 자체를 나타낼 것 같습니다.
정규식에서 정규식 자체 기호를 입력할 때, \문자를 사용합니다.(여타 많은 언어에서 escape sequence로 부르는 기호)
--
http://www.dgkim.net/
여러가지 방법을 찾아서 보니까 cat dog cat
여러가지 방법을 찾아서 보니까
cat dog cat dog 이렇게 문자열이 있을때
sed s/\(cat\)\(dog\)/\2\1 filename
이렇게하면
dog cat dog cat 이렇게 swap 된다고하는데.. 그래서 해봤더니 안되더라구요. 제가 명령어를 잘 못 쓴건가요?
이유
원래 질문에서와 같이 sed의 s/에서 시작하는 부분에서 ' 따옴표로 감싸서 해주십시오.
그리고, 끝나는 부분을 표시해 주어야 합니다. 즉, s/../../
완성해 보면 아래와 같습니다.
그리고, cat dog을 붙여서 찾기 했으므로, 실제로는 아래와 같이 공백이 들어가야 합니다.
--
http://www.dgkim.net/
댓글 달기