전체 줄을 sed로 바꾸는 방법?


132

줄이있는 파일이 있다고 가정합니다.

aaa = bbb

이제 그것들을 다음과 같이 바꾸고 싶습니다 :

aaa = xxx

다음과 같이 할 수 있습니다.

sed "s / aaa = bbb / aaa = xxx / g"

이제 다음과 같이 몇 줄의 파일이 있습니다.

aaa = bbb
aaa = ccc
aaa = ddd
aaa = [다른 것]

모든aaa=[something]sedaaa=xxx사용하여 어떻게 바꿀 수 있습니까?


2
[something else]리터럴 텍스트 입니까 , 아니면 그냥 자리 표시 자입니까? 등호 다음에 가능한 형식은 무엇입니까?
ean5533

그것은 sed 질문이 아닌 정규식 질문에 가깝습니다.
saferJo

답변:


217

이 시도:

sed "s/aaa=.*/aaa=xxx/g"

4
습관의 힘,이 경우 무시할 수 있습니다. 첫 번째가 아닌 각 경기를 대체하는 라인의 전역 대체로 사용됩니다. 이 경우 첫 번째 항목 만로 인해 일치합니다 .*.
John Doyle

1
Michael J. Barber, gregexp의 모든 인스턴스를 교체로 교체
A-IV

116

sed의 change line을 사용하여이를 수행 할 수도 있습니다.

sed -i "/aaa=/c\aaa=xxx" your_file_here

이것은 통과하고 aaa=테스트 를 통과하는 모든 줄을 찾습니다. 즉, 줄에 문자가 포함되어 있음을 의미합니다 aaa=. 그런 다음 전체 행을 aaa = xxx로 바꿉니다. ^테스트 시작 부분에를 추가 하여 시작하는 줄만 얻을 수 aaa=있지만 그 결과는 본인에게 달려 있습니다.


12
OS X의이 sed필요 c백 슬래시와 개행 문자가 반드시 따라야 할, 그것은 삽입 된 텍스트에 줄 바꿈을 추가하지 않습니다,하지만 당신은 예를 들어 사용할 수 있습니다 $'/aaa=/c\\\naaa=xxx\n'.
Lri

다음 은 @Mr 의 변경 / 대체 기능 에 대한 sed 문서에 있습니다 . T가 얘기하고 있습니다.
gene_wood

이것은 실제로 (그러나 LRI의 버전이 이식을 위해 필요) ... 질문을 받았다 일을에 가장 가까운
게르트 반 베르그 덴

42

이처럼 :

sed 's/aaa=.*/aaa=xxx/'

aaa=가 라인의 시작 부분에 있음을 보장하려면 다음을 수행하십시오.

sed 's/^aaa=.*/aaa=xxx/'

1
aaa = 'xxxx'로 바꾸려면 어떻게해야합니까? 나는 탈출을 시도 sed 's/aaa=.*/aaa=\'xxx\'/'했지만 그것은 >새로운 줄에 프롬프트 를 엽니 다 ...
Nagev

2

사용하고 싶다면 awk이것도 효과가 있습니다.

awk -F= '{$2="xxx";print}' OFS="\=" filename


0

이것은 당신을 위해 일할 수 있습니다 :

cat <<! | sed '/aaa=\(bbb\|ccc\|ddd\)/!s/\(aaa=\).*/\1xxx/'
> aaa=bbb
> aaa=ccc
> aaa=ddd
> aaa=[something else]
!
aaa=bbb
aaa=ccc
aaa=ddd
aaa=xxx

나는에 대한 명시 적 검사를 생각하지 않는다 bbb, ccc그리고 ddd영업이 생각했던 아주 것입니다.
spinup
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.