입력하다:
United+States
산출:
United States
sed
나는 그것을 성공하지 못한 채 여러 번 사용해 보았습니다 .
답변1
기본적으로 sed
BRE(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 + b
a++b
이 패턴은 \>
단어 끝의 너비가 0인 공백과 일치하며 \<
단어 시작 부분에서도 유사합니다. GNU는 (단어의 시작이나 끝) sed
도 이해하는 반면, BSD는 및 에 대해 알고 있으며 이는 각각 및 와 동일하게 작동합니다 .\b
sed
[[:<:]]
[[:>:]]
\<
\>
답변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