sed에서 더하기 기호를 공백으로 바꾸는 방법은 무엇입니까?

sed에서 더하기 기호를 공백으로 바꾸는 방법은 무엇입니까?

입력하다:

United+States

산출:

United States

sed나는 그것을 성공하지 못한 채 여러 번 사용해 보았습니다 .

답변1

기본적으로 sedBRE(Basic Regular Expressions)가 사용되며 더하기 기호는 특별하지 않습니다. 따라서 s일반 문자처럼 명령에서 사용할 수 있습니다.

<<< 'United+States' sed 's/+/ /g'

g같은 줄의 여러 인스턴스( ) 또는 여러 줄의 파일을 수정하려는 경우

sed 's/+/ /g' filename

확장 정규식(ERE, sed -E이를 지원하는 버전 sed)을 사용하는 경우 더하기 기호를 이스케이프 처리해야 합니다.

sed -E 's/\+/ /g' ...

(바라보다이 문제정규 표현식 변형 간의 차이점을 이해합니다. )

답변2

$ echo 'United+States' | tr '+' ' '
United States

문자 하나만 변경하므로 를 사용하는 것이 더 빠릅니다 tr.

동등한 sed스크립트는 다음과 같습니다

$ echo 'United+States' | sed 'y/+/ /'
United States

또는

$ echo 'United+States' | sed 's/+/ /g'
United States

y의 명령은 sed첫 번째 문자 그룹( +여기서는 공백만)의 모든 항목을 두 번째 그룹의 해당 문자(여기서는 공백만)로 바꿉니다.

s명령은 정규식과 일치하는 텍스트를 일부 텍스트로 바꿉니다. 의 경우 g나타날 때마다 이 작업을 수행합니다. 이것이 없으면 각 입력 라인의 첫 번째 항목에서만 작동합니다.


더하기 기호 양쪽에 단어가 있는 경우에만 더하기 기호를 공백으로 변경합니다.

sed 's/\>+\</ /g'

로 변경되지만 a+b동일 하게 a b유지됩니다 .a + ba++b

이 패턴은 \>단어 끝의 너비가 0인 공백과 일치하며 \<단어 시작 부분에서도 유사합니다. GNU는 (단어의 시작이나 끝) sed도 이해하는 반면, BSD는 및 에 대해 알고 있으며 이는 각각 및 와 동일하게 작동합니다 .\bsed[[:<:]][[:>:]]\<\>

답변3

이 예제를 확인하고 결과에 따라 작업할 수 있습니다.

예:- 이 코드는 변경을 수행하고 수정된 파일을 "songs2.txt"에 씁니다. 출력 파일에는 다음이 포함됩니다.

1. 저스틴 팀버레이크, 타이틀 545, 가격 $7.30
2. 테일러 스위프트, 타이틀 723, 가격 $7.90
3. 믹 재거, 타이틀 610, 가격 $7.90
4. 레이디 가가, 타이틀 118, 가격 $7.30
5. 조니 캐시, 타이틀 482, 가격 $6.50
6. 엘비스 프레슬리(Elvis Presley), 타이틀 335, 가격 $7.30
7. 존 레논, 타이틀 271, 가격 $7.90

"의 모든 항목을 바꾸려는 경우현금" 그리고"쓰레기" 너는 사용한다:

sed 's/Cash/Trash/' songs.txt > songs2.txt

참조 링크:-Linux에서 Sed 명령을 사용하는 방법에 대한 빠른 가이드

관련 정보