텍스트 파일의 각 줄에서 문자열의 n 번째 발생을 대체


15

공백으로 구분 된 문자열 (2-5)이있는 큰 텍스트 파일이 있습니다. 문자열은 " '"또는 "-"를 포함 할 수 있습니다. 두 번째 공간을 파이프로 바꾸고 싶습니다.

가장 좋은 방법은 무엇입니까?

sed를 사용하여 이것을 생각했습니다.

sed -r 's/(^[a-z'-]+ [a-z'-]+\b) /\1|/' filename.txt

다른 / 더 나은 / 간단한 아이디어가 있습니까?

답변:


22

대체 명령 끝에 숫자를 추가 할 수 있습니다. 예를 들어, 다음은 두 번째 항목 을 각 줄의 old문자열로 대체합니다 .newfile

sed 's/old/new/2' file

따라서 제안 된 솔루션 대신 다음을 사용할 수 있습니다.

sed 's/ /|/2'

자세한 정보는 예를 들어이 sed tutorial을 참조하십시오 .


2
로부터 sed정보 파일 : "참고 : POSIX 표준을 사용하면 혼합 할 때 발생해야하는 지정하지 않습니다 g' and NUMBER modifiers, and currently there is no widely agreed upon meaning across 나오지도 '. 구현을 위해 GNU`나오지도'상호 작용으로 정의 경우 : NUMBERth 전에 일치를 무시하고 일치를 모두 교체 NUMBER 일부터 일치합니다. "
추후 공지가있을 때까지 일시 중지되었습니다.

정보 파일 ... 나는 그들을 싫어. 어쨌든 모호한 부분을 제거했습니다. 좋은 의견, +1
mrucci

1
고마워요, mrucci와 Dennis. 나는 거기에 간단한 것이 있어야한다고 생각했습니다.
dnkb

텍스트 조작과 관련된 모든 문제가있는 것 같습니다 sed. sed더 유용 하게 해주셔서 고맙다고 확신 하지는 않지만 어쨌든하겠습니다. ;)
Jamie

1

버전을 사용해 보셨습니까? 작동 했습니까? 기본적으로 좋은 생각이라고 생각하기 때문입니다. 그래도 약간 다르게 할 것입니다.

sed -re 's/^([^ ]+ +[^ ]+) /\1|/'

이것은 공백이 아닌 단어의 문자를 허용하며 처음 두 단어 사이에 공백을 두 개 이상 허용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.